HOWTO · Java

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

Use getClass(), getSimpleName() e getTypeName() para inspecionar a classe de tempo de execução de um objeto Java, não o tipo declarado da variável.

Nesta página

Use getClass() para inspecionar a classe de tempo de execução de um objeto não nulo. Esse método não revela o tipo declarado da variável. Chame getSimpleName() para obter o nome da classe sem o pacote ou getTypeName() para obter um nome de tipo como java.lang.String.

Use getClass().getSimpleName() para verificar a classe de tempo de execução de um objeto em Java

Chame getClass() em um objeto para obter seu objeto Class<?> e, em seguida, chame getSimpleName() para obter o nome da classe sem informações do pacote. O resultado corresponde à classe de tempo de execução do objeto, mesmo quando a variável é declarada como Object.

Execute este exemplo:

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

Arrays são objetos, então getClass() também funciona com eles; um valor String[] tem o nome simples String[]. Um tipo primitivo, como int, não tem o método getClass(). Ao atribuí-lo a um Object, o Java o encapsula em um Integer; por isso, a classe informada é Integer, e não int.

Use getClass().getTypeName() para verificar a classe de tempo de execução de um objeto em Java

getTypeName() retorna o nome do tipo como uma String. Para um objeto String, o resultado inclui o nome do pacote, ao contrário de getSimpleName().

Execute este exemplo:

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 os métodos recebem um objeto não nulo e informam sua classe de tempo de execução. Escolha getSimpleName() quando o nome curto da classe for suficiente; escolha getTypeName() quando o nome do tipo com o pacote for útil. Nenhum dos métodos determina o tipo declarado de uma variável.

Conclusão

Use getClass().getSimpleName() para obter um nome de classe conciso e getClass().getTypeName() para obter um nome de tipo que inclui informações do pacote. Esses métodos se aplicam a objetos, inclusive arrays. Encapsule valores primitivos antes de inspecioná-los e lembre-se de que o resultado será o nome da classe wrapper, como Integer para um int.