HOWTO · Java

Como obter a classe de execução de um objeto em Java

Saiba por que Java não tem o operador typeof e como getClass() retorna a classe de execução de um objeto, inclusive de objetos wrapper.

Nesta página

Java não tem o operador typeof. Para inspecionar a classe de execução de um objeto, chame getClass() em uma referência não nula. Valores primitivos, como int e char, não são objetos e não podem chamar esse método diretamente; primeiro, converta o primitivo em um objeto wrapper para usar essa abordagem. Java também oferece outras maneiras de trabalhar com informações de tipo, então getClass() é útil quando você precisa saber a classe real de um objeto existente.
As perguntas sobre tipos e operadores estão agrupadas no Tutorial de Java, incluindo a forma como Java responde à questão do typeof.

Obter a classe de execução de um objeto em Java

O método getClass() é definido por Object e retorna um objeto Class que descreve a classe de execução do receptor. Por exemplo, uma referência String pode chamar o método diretamente. Ao imprimir esse objeto Class, o nome inclui o pacote, como em class java.lang.String.

Este programa Java completo imprime uma string e a classe do objeto referenciado por ela:

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

A saída padrão é:

Hello
Class: class java.lang.String

Se você começar com um primitivo, atribua-o a um objeto wrapper, como Integer ou Character, antes de chamar getClass(). O boxing converte um valor primitivo no objeto wrapper correspondente. No momento da chamada, a referência precisa apontar para um objeto; uma referência null não tem receptor.

Obter a classe de execução de objetos wrapper em Java

As classes wrapper permitem inspecionar objetos que representam valores primitivos. Este exemplo usa Integer e Character. getClass() identifica a classe de execução de cada objeto, enquanto getSimpleName() retorna o nome sem a qualificação do pacote.

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

Os nomes de classe exibidos por essas chamadas são java.lang.Integer e java.lang.Character; seus nomes simples são Integer e Character.