Como obter o nome de uma classe sem o pacote?

199

Em C #, temos Type.FullNamee Type.Namepara obter o nome de um tipo (classe neste caso) com ou sem o namespace (pacote em java-world).

Qual é o equivalente a java Type.Name?

Claramente, deve haver uma maneira melhor do que usá Class.getName()-lo e removê-lo manualmente do nome do pacote.

Ola Herrdahl
fonte
1
Eu fiz uma pesquisa rápida sobre isso e não fiquei impressionado com os primeiros resultados que encontrei no Google, então considere isso como um brinde.
Ola Herrdahl
5
Esqueça o Google! O primeiro lugar para procurar por respostas sobre a biblioteca de classes padrão Java são os docs API Java (aka javadocs): java.sun.com/javase/reference/api.jsp
Stephen C

Respostas:

358

Class.getSimpleName()

Retorna o nome simples da classe subjacente, conforme fornecido no código-fonte. Retorna uma string vazia se a classe subjacente for anônima.

O nome simples de uma matriz é o nome simples do tipo de componente com "[]" anexado. Em particular, o nome simples de uma matriz cujo tipo de componente é anônimo é "[]".

Na verdade, está retirando as informações do pacote do nome, mas isso está oculto para você.

Bozho
fonte
Ele também mapeia o nome interno de uma classe anônima para uma String vazia e faz coisas com nomes de classes de matriz.
Stephen C
4
Eu não sabia que poderia retornar uma string vazia, e IMHO é uma falha de design. Se não houver um nome simples, ele deve gerar uma exceção.
finnw
20

A função a seguir funcionará no JDK versão 1.5 e posterior.

public String getSimpleName()
identidade
fonte
14

Se estiver usando um StackTraceElement, use:

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

System.out.println(simpleClassName);
Fidel
fonte