HOWTO · Java

Obtener la clase en tiempo de ejecución de un objeto en Java

Aprende a obtener la clase en tiempo de ejecución de un objeto con getClass() y por qué Java no tiene un operador typeof.

En esta página

Java no tiene un operador typeof. Para consultar la clase real de un objeto durante la ejecución, llama a getClass() sobre una referencia que no sea null. Los valores primitivos, como int y char, no son objetos, así que no pueden invocar este método directamente. Primero hay que convertir el valor en un objeto envolvente para aplicar este método. Java ofrece otras formas de trabajar con información de tipos; getClass() es útil cuando necesitas conocer la clase de un objeto que ya existe.

Obtener la clase en tiempo de ejecución de un objeto en Java

El método getClass(), definido en Object, devuelve una instancia de Class que describe la clase real del objeto receptor durante la ejecución. Por ejemplo, puedes llamarlo directamente desde una referencia a String. Al imprimir la instancia de Class, también aparece el nombre del paquete: class java.lang.String.

Este programa completo en Java imprime una cadena y la clase del objeto al que hace referencia:

class RuntimeClassExample {
    public static void main(String[] args) {
        String message = "Hello";
        System.out.println(message);
        System.out.println("Class: " + message.getClass());
    }
}

La salida estándar del programa es:

Hello
Class: class java.lang.String

Si partes de un valor primitivo, asígnalo primero a un objeto envolvente, como Integer o Character, y luego llama a getClass(). El boxing convierte el valor primitivo en el objeto envolvente correspondiente. Cuando invoques el método, la referencia debe apuntar a un objeto; si vale null, no hay ningún objeto sobre el que llamar al método.

Obtener la clase en tiempo de ejecución de objetos de clases envolventes en Java

Las clases envolventes permiten inspeccionar objetos que representan valores primitivos. En este ejemplo se usan Integer y Character. getClass() identifica la clase real de cada objeto durante la ejecución, mientras que getSimpleName() devuelve el nombre de la clase sin el paquete.

class WrapperClassExample {
    public static void main(String[] args) {
        Integer count = 20;
        Character letter = 'G';

        System.out.println("Integer class: " + count.getClass());
        System.out.println("Character class: " + letter.getClass());
        System.out.println("Integer simple name: " + count.getClass().getSimpleName());
        System.out.println("Character simple name: " + letter.getClass().getSimpleName());
    }
}

Estas llamadas muestran los nombres de clase java.lang.Integer y java.lang.Character; sus nombres simples son Integer y Character.