Làm thế nào để có được tên của một lớp mà không có gói?


199

Trong C #, chúng ta có Type.FullNameType.Nameđể lấy tên của một loại (lớp trong trường hợp này) có hoặc không có không gian tên (gói trong thế giới java).

Java tương đương với Type.Namecái gì?

Rõ ràng phải có một cách tốt hơn so với việc sử dụng Class.getName()và tước tên của gói theo cách thủ công.


1
Tôi đã thực hiện một tìm kiếm nhanh về điều này và không ấn tượng với kết quả đầu tiên mà tôi tìm thấy trên Google vì vậy hãy coi đây là một phần mềm miễn phí.
Ola Herrdahl

5
Hãy quên Google đi! Nơi đầu tiên để tìm câu trả lời về thư viện lớp tiêu chuẩn Java là các tài liệu API Java (còn gọi là javadocs): java.sun.com/javase/reference/api.jsp
Stephen C

Câu trả lời:


358

Class.getSimpleName()

Trả về tên đơn giản của lớp bên dưới như được đưa ra trong mã nguồn. Trả về một chuỗi rỗng nếu lớp bên dưới là ẩn danh.

Tên đơn giản của một mảng là tên đơn giản của loại thành phần có thêm "[]". Cụ thể, tên đơn giản của một mảng có loại thành phần là ẩn danh là "[]".

Nó thực sự tước thông tin gói từ tên, nhưng điều này được ẩn từ bạn.


Nó cũng ánh xạ tên nội bộ của một lớp ẩn danh thành một Chuỗi trống và thực hiện công cụ với các tên lớp mảng.
Stephen C

4
Tôi không biết nó có thể trả về một chuỗi rỗng và IMHO là một lỗi thiết kế. Nếu không có tên đơn giản thì nên ném ngoại lệ.
vây

20

Hàm sau sẽ hoạt động trong phiên bản JDK 1.5 trở lên.

public String getSimpleName()

14

Nếu sử dụng StackTraceEuity, hãy sử dụng:

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

System.out.println(simpleClassName);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.