Como verificar o tipo de variável em Java?
Como posso verificar se a minha variável é um int, array, double, etc...?
editar: por exemplo, Como posso verificar se uma variável é um array? Há alguma função para fazer isto?
10 answers
Java é uma linguagem estaticamente tipada, então o compilador faz a maior parte desta verificação para você. Uma vez que você declare uma variável para ser um determinado tipo, o compilador irá garantir que ele só é atribuído valores desse tipo (ou valores que são sub-tipos desse tipo).
Os exemplos que deu (int, array, double) são todos primitivos, e não há sub-tipos deles. Assim, se você declarar uma variável para ser um int
:
int x;
Podes ter a certeza que só vai ser sempre manter os valores de int
.
Se você declarou uma variável como sendo uma List
, no entanto, é possível que a variável mantenha sub-tipos de List
. Exemplos destes incluem:ArrayList
, LinkedList
, etc.
Se tivesses uma variável List
, e precisasses de saber se era uma ArrayList
, podias fazer o seguinte:
List y;
...
if (y instanceof ArrayList) {
...its and ArrayList...
}
No entanto, se achar que precisa de fazer isso, pode querer repensar a sua abordagem. Na maioria dos casos, se você seguir princípios orientados a Objetos, você vai não preciso de fazer isto. No entanto, existem, naturalmente, excepções a todas as regras.
Exemplo:
class Typetester {
void printType(byte x) {
System.out.println(x + " is an byte");
}
void printType(int x) {
System.out.println(x + " is an int");
}
void printType(float x) {
System.out.println(x + " is an float");
}
void printType(double x) {
System.out.println(x + " is an double");
}
void printType(char x) {
System.out.println(x + " is an char");
}
}
Depois:
Typetester t = new Typetester();
t.printType( yourVariable );
a.getClass().getName()
- irá dar-lhe o tipo de dados do objecto real referido por a
, mas não o tipo de dados para o qual a variável a
foi originalmente declarada como ou subsequentemente lançada.
boolean b = a instanceof String
- dar-lhe-á se o objecto real referido por a
é ou não uma instância de uma classe específica.
Mais uma vez, o tipo de dados a que a variável a
foi originalmente declarada como ou subsequentemente moldada não tem qualquer relação com o resultado do instanciamento do operador.
Você pode trabalhar com inteiro em vez de inteiro, duplo em vez de duplo, etc. (tais classes existem para todos os tipos primitivos).
Então você pode usar o operador instanceof, como if(var instanceof Integer){...}
Re a segunda parte, a única circunstância que você ainda não sabe se uma variável é uma array é se é um objeto. Nesse caso, object.getClass().isArray()
dir-te-á.
if(x.getClass() == MyClass.class){...}
public <T extends Object> void checkType(T object) {
if (object instanceof Integer)
System.out.println("Integer ");
else if(object instanceof Double)
System.out.println("Double ");
else if(object instanceof Float)
System.out.println("Float : ");
else if(object instanceof List)
System.out.println("List! ");
else if(object instanceof Set)
System.out.println("Set! ");
}
Assim, não precisa de ter vários métodos sobrecarregados. Eu acho que é uma boa prática usar coleções sobre arrays devido aos benefícios adicionais. Dito isto, eu não sei como verificar para um tipo de array. Talvez alguém possa melhorar esta solução. Espero que isto ajude!
Sim, eu sei que isto também não procura primitivos.
Usa apenas:
.getClass().getSimpleName();
Exemplo:
StringBuilder randSB = new StringBuilder("just a String");
System.out.println(randSB.getClass().getSimpleName());
Resultado:
StringBuilder
//move your variable into an Object type
Object obj=whatYouAreChecking;
System.out.println(obj);
// moving the class type into a Class variable
Class cls=obj.getClass();
System.out.println(cls);
// convert that Class Variable to a neat String
String answer = cls.getSimpleName();
System.out.println(answer);
Aqui está um método:
public static void checkClass (Object obj) {
Class cls = obj.getClass();
System.out.println("The type of the object is: " + cls.getSimpleName());
}
Classe pública Demo1 {
Object printType(Object o)
{
return o;
}
public static void main(String[] args) {
Demo1 d=new Demo1();
Object o1=d.printType('C');
System.out.println(o1.getClass().getSimpleName());
}
}