Как получить название класса без пакета?


199

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

Что эквивалентно Java Type.Name?

Очевидно, что должен быть лучший способ, чем использовать Class.getName()и убрать его из имени пакета вручную.


1
Я сделал быстрый поиск по этому вопросу и не был впечатлен первыми результатами, которые я нашел в Google, поэтому считаю это халявой.
Ола Херрдал

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

Ответы:


359

Class.getSimpleName()

Возвращает простое имя базового класса, указанное в исходном коде. Возвращает пустую строку, если базовый класс является анонимным.

Простое имя массива - это простое имя типа компонента с добавлением «[]». В частности, простое имя массива, тип компонента которого является анонимным, - «[]».

На самом деле он удаляет информацию о пакете из названия, но это скрыто от вас.


Он также отображает внутреннее имя анонимного класса на пустую строку и делает вещи с именами классов массива.
Стивен К

4
Я не знал, что он может вернуть пустую строку, и ИМХО, это недостаток дизайна. Если нет простого имени, оно должно вызвать исключение.
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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.