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.