¿Cómo verificar el tipo de variable en Java?

¿Cómo puedo verificar para asegurarme de que mi variable sea un int, array, double, etc …?

Editar: Por ejemplo, ¿cómo puedo verificar que una variable sea una matriz? ¿Hay alguna función para hacer esto?

Java es un lenguaje estáticamente tipado, por lo que el comstackdor hace la mayor parte de esta comprobación por usted. Una vez que declara que una variable es de un tipo determinado, el comstackdor se asegurará de que solo se le asignen valores de ese tipo (o valores que sean subtipos de ese tipo).

Los ejemplos que proporcionó (int, array, double) son todos primitivos, y no hay subtipos de ellos. Por lo tanto, si declara que una variable es un int :

 int x; 

Puede estar seguro de que solo tendrá valores int .

Sin embargo, si declara que una variable es una List , es posible que la variable contenga subtipos de List . Ejemplos de estos incluyen ArrayList , LinkedList , etc.

Si tenía una variable List y necesitaba saber si era una ArrayList , podría hacer lo siguiente:

 List y; ... if (y instanceof ArrayList) { ...its and ArrayList... } 

Sin embargo, si cree que necesita hacerlo, puede volver a pensar su enfoque. En la mayoría de los casos, si sigue principios orientados a objetos, no tendrá que hacer esto. Sin embargo, hay excepciones para todas las reglas.

En realidad, es bastante fácil rodar tu propio probador al abusar de la capacidad de sobrecarga del método de Java. Aunque todavía tengo curiosidad de saber si hay un método oficial en el SDK.

Ejemplo:

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

entonces:

 Typetester t = new Typetester(); t.printType( yourVariable ); 

a.getClass().getName() – le dará el tipo de datos del objeto real referido por a , pero no el tipo de datos al que la variable a fue originalmente declarada o posteriormente convertida.

boolean b = a instanceof String – le dará si el objeto real referido por a es una instancia de una clase específica o no. Nuevamente, el tipo de datos al que la variable a se declaró originalmente como o posteriormente se emitió no tiene relación con el resultado del operador instanceof.

Tomé esta información de: ¿Cómo sabes un tipo de variable en Java?

Esto puede suceder Estoy tratando de analizar un String en un int y me gustaría saber si mi Integer.parseInt(s.substring(a, b)) está expulsando un int o basura antes de intentar resumirlo.

Por cierto, esto se conoce como Reflexión. Aquí hay más información sobre el tema: http://docs.oracle.com/javase/tutorial/reflect/

Puede trabajar con Integer en lugar de int, Double en lugar de double, etc. (tales clases existen para todos los tipos primitivos). Luego puede usar el operador instanceof, como if(var instanceof Integer){...}

La primera parte de tu pregunta no tiene sentido. No hay ninguna circunstancia en la que no se conozca el tipo de una variable primitiva en el momento de la comstackción.

En la segunda parte, la única circunstancia de que usted no sabe ya si una variable es una matriz es si es un Objeto. En este caso, object.getClass().isArray() te dirá.

Lo hice usando: if(x.getClass() == MyClass.class){...}

Bueno, creo que verificar el tipo de variable se puede hacer de esta manera.

 public  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! "); } 

De esta manera, no necesita tener múltiples métodos sobrecargados. Creo que es una buena práctica usar colecciones sobre matrices debido a los beneficios adicionales. Habiendo dicho eso, no sé cómo buscar un tipo de matriz. Quizás alguien pueda mejorar esta solución. ¡Espero que esto ayude!

PD Sí, sé que esto no comprueba también los primitivos.

No estaba contento con ninguna de estas respuestas, y la que está bien no tiene explicación ni votos negativos, así que busqué, encontré algunas cosas y la edité para que sea fácil de entender. Juega con eso, no tan sencillo como uno esperaría.

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

Aquí hay un método:

 public static void checkClass (Object obj) { Class cls = obj.getClass(); System.out.println("The type of the object is: " + cls.getSimpleName()); } 

Solo usa:

 .getClass().getSimpleName(); 

Ejemplo:

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

Salida:

 StringBuilder 

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

}