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?

 83
Author: Strawberry, 2010-10-22

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.
 81
Author: pkaeding, 2010-10-22 05:05:46
Na verdade, é muito fácil rolar o seu próprio testador, abusando da capacidade de sobrecarga do método de Java. Embora ainda esteja curioso se há um método oficial no sdk.

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 );
 31
Author: Mvcoile, 2013-05-23 14:46:13

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.

Eu tirei esta informação. de: Como você conhece um tipo variável em java? Isto pode acontecer. Estou a tentar transformar um int num int e gostaria de saber se o meu int está a deitar fora um int ou lixo antes de tentar resumi-lo. A propósito, isto é conhecido como reflexo. Aqui estão mais algumas informações sobre o assunto: http://docs.oracle.com/javase/tutorial/reflect/
 16
Author: Glen Pierce, 2017-09-25 14:06:50

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){...}

 9
Author: Alex Abdugafarov, 2013-05-22 03:13:40
A primeira parte da sua pergunta não tem sentido. Não há nenhuma circunstância em que você não saiba o tipo de uma variável primitiva no tempo de compilação.

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-á.

 6
Author: user207421, 2017-05-23 06:36:42
Fi-lo usando: if(x.getClass() == MyClass.class){...}
 5
Author: Vinicius Arruda, 2017-05-23 06:36:26
Bem, acho que verificar o tipo de variável pode ser feito desta forma.
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.
 5
Author: Amogh, 2017-09-25 14:03:54

Usa apenas:

.getClass().getSimpleName();

Exemplo:

StringBuilder randSB = new StringBuilder("just a String");
System.out.println(randSB.getClass().getSimpleName());

Resultado:

StringBuilder
 2
Author: Debayan, 2018-08-09 08:36:56
Eu não estava feliz com nenhuma dessas respostas, e a que está certa não tem nenhuma explicação e votos negativos, então eu procurei, encontrei algumas coisas e editei - as para que seja fácil de entender. Ter um jogo com ele, não tão direto como se esperaria.
//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());       
}
 1
Author: Neil Regan, 2017-10-17 20:49:27

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

}

}

 -4
Author: Dev, 2017-02-10 07:19:41