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

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()

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

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

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

Bozho
источник
Он также отображает внутреннее имя анонимного класса на пустую строку и делает вещи с именами классов массива.
Стивен К
4
Я не знал, что он может вернуть пустую строку, и ИМХО, это недостаток дизайна. Если нет простого имени, оно должно вызвать исключение.
finnw
20

Следующая функция будет работать в JDK версии 1.5 и выше.

public String getSimpleName()
identy
источник
14

Если вы используете StackTraceElement, используйте:

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

System.out.println(simpleClassName);
Фидель
источник