HOWTO · Java

Cómo inspeccionar la clase en tiempo de ejecución de un objeto en Java

Usa `getClass()`, `getSimpleName()` y `getTypeName()` para consultar la clase en tiempo de ejecución de un objeto en Java, no el tipo declarado de la variable.

En esta página

Usa getClass() para consultar la clase en tiempo de ejecución de un objeto no nulo. Este método no revela el tipo declarado de la variable. Llama a getSimpleName() para obtener el nombre de la clase sin el paquete, o a getTypeName() para obtener un nombre de tipo como java.lang.String.

Usar getClass().getSimpleName() para obtener el nombre simple de una clase en Java

Llama a getClass() en un objeto para obtener su objeto Class<?>; después, llama a getSimpleName() para obtener el nombre de la clase sin la información del paquete. El resultado refleja la clase en tiempo de ejecución del objeto, incluso si la variable está declarada como Object.

Ejecuta este ejemplo:

public class RuntimeSimpleNames {
  public static void main(String[] args) {
    Object value = "Hello, Java!";
    String[] names = {"Ada", "Lin"};
    int count = 3;
    Object boxedCount = count;

    System.out.println(value.getClass().getSimpleName());
    System.out.println(names.getClass().getSimpleName());
    System.out.println(boxedCount.getClass().getSimpleName());
  }
}
String
String[]
Integer

Los arrays también son objetos, así que getClass() funciona con ellos; un valor String[] tiene el nombre simple String[]. Un primitivo como int no tiene el método getClass(). Al asignarlo a un Object, Java lo convierte en un objeto Integer; por eso, la clase indicada es Integer, no int.

Usar getClass().getTypeName() para consultar el nombre de tipo en Java

getTypeName() devuelve el nombre del tipo como una cadena (String). En un objeto String, incluye el nombre del paquete, a diferencia de getSimpleName().

Ejecuta este ejemplo:

public class RuntimeTypeName {
  public static void main(String[] args) {
    Object value = "Hello, Java!";
    String typeName = value.getClass().getTypeName();
    System.out.println(typeName);
  }
}
java.lang.String

Ambos métodos se aplican a un objeto no nulo y muestran su clase en tiempo de ejecución. Elige getSimpleName() cuando baste con el nombre corto de la clase; usa getTypeName() cuando resulte útil incluir el paquete en el nombre del tipo. Ninguno de los dos determina el tipo declarado de una variable.

Conclusión

Usa getClass().getSimpleName() para obtener un nombre de clase breve y getClass().getTypeName() para obtener un nombre de tipo que incluya la información del paquete. Estos métodos se aplican a objetos, incluidos los arrays. Antes de inspeccionar un valor primitivo, conviértelo en un objeto; ten en cuenta que el resultado será la clase envolvente, como Integer para un int.