¿Cómo obtener el nombre de una clase sin el paquete?

199

En C # tenemos Type.FullNamey Type.Namepara obtener el nombre de un tipo (clase en este caso) con o sin el espacio de nombres (paquete en java-world).

¿A qué equivale Java Type.Name?

Claramente, debe haber una mejor manera que usarlo Class.getName()y quitarle el nombre del paquete manualmente.

Ola Herrdahl
fuente
1
Hice una búsqueda rápida sobre esto y no me impresionaron los primeros resultados que encontré en Google, así que considere esto como un obsequio.
Ola Herrdahl
55
¡Olvídate de Google! El primer lugar para buscar respuestas sobre la biblioteca de clases estándar de Java son los documentos API de Java (también conocidos como javadocs): java.sun.com/javase/reference/api.jsp
Stephen C

Respuestas:

359

Class.getSimpleName()

Devuelve el nombre simple de la clase subyacente como se indica en el código fuente. Devuelve una cadena vacía si la clase subyacente es anónima.

El nombre simple de una matriz es el nombre simple del tipo de componente con "[]" adjunto. En particular, el nombre simple de una matriz cuyo tipo de componente es anónimo es "[]".

En realidad, está quitando la información del paquete del nombre, pero esto está oculto para usted.

Bozho
fuente
También asigna el nombre interno de una clase anónima a una cadena vacía y hace cosas con nombres de clases de matriz.
Stephen C
44
No sabía que podría devolver una cadena vacía, y en mi humilde opinión, es un defecto de diseño. Si no hay un nombre simple, debería arrojar una excepción.
finnw
20

La siguiente función funcionará en JDK versión 1.5 y superior.

public String getSimpleName()
identy
fuente
14

Si usa un StackTraceElement, use:

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

System.out.println(simpleClassName);
Fidel
fuente