Як отримати назву класу без пакета?


199

У C # ми маємо Type.FullNameі Type.Nameдля отримання імені типу (класу в даному випадку) з простором імен або без нього (пакет у java-світі).

Чим еквівалентна Java Type.Name?

Очевидно, що має бути кращий спосіб, ніж використовувати Class.getName()та знімати назву пакета вручну.


1
Я швидко зробив пошук цього питання і не був вражений першими результатами, виявленими в Google, тому вважаю це халявою.
Ola Herrdahl

5
Забудьте Google! Перше місце , щоб шукати відповіді про стандартні бібліотеках класів Java є API Docs Java (ака Javadocs): java.sun.com/javase/reference/api.jsp
Стівен C

Відповіді:


358

Class.getSimpleName()

Повертає просте ім'я базового класу, вказане у вихідному коді. Повертає порожній рядок, якщо базовий клас є анонімним.

Просте ім'я масиву - це просте ім'я типу компонента із доданим "[]". Зокрема, просте ім'я масиву, тип компонента якого є анонімним, - "[]".

Це фактично позбавлення інформації про пакет від імені, але це приховано від вас.


Він також відображає внутрішнє ім'я анонімного класу в порожній String і містить файли з іменами класів масиву.
Стівен С

4
Я не знав, що це може повернути порожню рядок, і IMHO - це недолік дизайну. Якщо простого імені немає, слід викинути виняток.
finnw


14

Якщо ви використовуєте StackTraceElement, використовуйте:

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

System.out.println(simpleClassName);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.