จะรับชื่อคลาสที่ไม่มีแพ็คเกจได้อย่างไร


199

ใน C # เรามีType.FullNameและType.Nameรับชื่อประเภท (คลาสในกรณีนี้) โดยมีหรือไม่มีเนมสเปซ (แพ็คเกจใน java-world)

จาวาเทียบเท่ากับType.Nameอะไร?

เห็นได้ชัดว่าจะต้องมีวิธีที่ดีกว่าการใช้Class.getName()และตัดชื่อแพ็คเกจด้วยตนเอง


1
ฉันทำการค้นหาอย่างรวดเร็วเกี่ยวกับเรื่องนี้และไม่ประทับใจกับผลลัพธ์แรกที่ฉันพบใน Google ดังนั้นให้พิจารณาว่านี่เป็น freebie
Ola Herrdahl

5
ลืม Google! สถานที่แรกที่จะมองหาคำตอบเกี่ยวกับห้องสมุดชั้นมาตรฐาน Java เป็น Java เอกสาร API (aka javadocs): java.sun.com/javase/reference/api.jsp
สตีเฟ่นซี

คำตอบ:


359

Class.getSimpleName()

ส่งคืนชื่อแบบง่ายของคลาสพื้นฐานที่กำหนดในซอร์สโค้ด ส่งกลับสตริงที่ว่างเปล่าถ้าชั้นพื้นฐานไม่ระบุชื่อ

ชื่อแบบง่ายของอาร์เรย์คือชื่อแบบง่ายของชนิดส่วนประกอบที่มี "[]" ต่อท้าย โดยเฉพาะชื่อแบบง่าย ๆ ของอาเรย์ที่มีประเภทส่วนประกอบที่ไม่ระบุชื่อคือ "[]"

จริงๆแล้วมันเป็นการดึงข้อมูลแพ็คเกจออกจากชื่อ แต่สิ่งนี้ถูกซ่อนไว้จากคุณ


นอกจากนี้ยังแมปชื่อภายในของคลาสที่ไม่ระบุชื่อกับสตริงว่างและทำสิ่งต่างๆด้วยชื่อคลาสอาเรย์
สตีเฟ่นซี

4
ฉันไม่รู้ว่ามันสามารถคืนค่าสตริงว่างและ IMHO นั่นเป็นข้อบกพร่องในการออกแบบ หากไม่มีชื่อง่าย ๆ ก็ควรจะมีข้อยกเว้น
finnw

20

ฟังก์ชั่นต่อไปนี้จะทำงานใน JDK เวอร์ชั่น 1.5 ขึ้นไป

public String getSimpleName()

14

หากใช้ StackTraceElement ให้ใช้:

String fullClassName = stackTraceElement.getClassName();
String simpleClassName = fullClassName.substring(fullClassName.lastIndexOf('.') + 1);

System.out.println(simpleClassName);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.