¿Cómo sabes un tipo de variable en Java?

Digamos que declaro una variable:

String a = "test"; 

Y quiero saber de qué tipo es, es decir, el resultado debería ser java.lang.String ¿Cómo hago esto?

 a.getClass().getName() 

Si quieres el nombre, usa el método de Martin. Si quieres saber si es una instancia de cierta clase:

boolean b = a instanceof String

Aprendí del motor de búsqueda (mi inglés es muy malo, código …) ¿Cómo obtener el tipo de variable? UPS :

 String str = "test"; String type = str.getClass().getName(); value: type = java.lang.String 

este método :

 str.getClass().getSimpleName(); value:String 

ahora ejemplo:

 Object o = 1; o.getClass().getSimpleName(); value:Integer 

Me gustaría ampliar la respuesta de Martin allí …

Su solución es bastante buena, pero puede modificarse para que cualquier “tipo de variable” pueda imprimirse así. (En realidad, es tipo de valor, más sobre el tema ). No está tan ajustado como lo está señalando una posibilidad.

Su solución fue:

 a.getClass().getName() 

Si quieres que funcione con algo, puedes hacer esto:

 ((Object) myVar).getClass().getName() //OR ((Object) myInt).getClass().getSimpleName() 

En este caso, la primitiva simplemente se envolverá en una envoltura. Obtendrás el Objeto de la primitiva en ese caso.

Yo mismo lo usé así:

 private static String nameOf(Object o) { return o.getClass().getSimpleName(); } 

Usando Generics:

 public static  String nameOf(T o) { return o.getClass().getSimpleName(); } 

Usar la función de sobrecarga del operador de java

 class Test { void printType(String x) { System.out.print("String"); } void printType(int x) { System.out.print("Int"); } // same goes on with boolean,double,float,object ... } 

Estoy de acuerdo con lo que dijo Joachim Sauer, no es posible saber (¡el tipo de variable! No el tipo de valor!) A menos que tu variable sea un atributo de clase (y deberías recuperar campos de clase, obtener el campo correcto por nombre …)

En realidad, para mí es totalmente imposible que cualquier a.xxx().yyy() te dé la respuesta correcta, ya que la respuesta sería diferente en el mismo objeto exacto, de acuerdo con el contexto en el que llamas a este método …

Como dijo teehoo, si sabes comstackr una lista definida de tipos para probar puedes usar instanceof pero también obtendrás subclases que regresen verdaderas …

Una posible solución también sería inspirarse en la implementación de java.lang.reflect.Field y crear su propia clase de Field , y luego declarar todas sus variables locales como esta implementación de Field personalizada … pero será mejor que encuentre otra solución , realmente me pregunto por qué necesitas el tipo de variable, y no solo el tipo de valor?

Creo que tenemos múltiples soluciones aquí:

  • instance de podría ser una solución.

¿Por qué? En Java, cada clase se hereda de la clase Object. Entonces, si tiene una variable y le gustaría saber el tipo, esto va a funcionar.

  • System.out.println (((Object) f) .getClass (). GetName ());

o

  • Integer.class.isInstance (1985); // da verdadero

o

  • isPrimitive ()

     public static void main(String[] args) { ClassDemo classOne = new ClassDemo(); Class classOneClass = classOne(); int i = 5; Class iClass = int.class; // checking for primitive type boolean retval1 = classOneClass.isPrimitive(); System.out.println("classOneClass is primitive type? = " + retval1); // checking for primitive type? boolean retval2 = iClass.isPrimitive(); System.out.println("iClass is primitive type? = " + retval2); } 

Esto nos va a dar:

  1. FALSO
  2. CIERTO

descubra más aquí: ¿Cómo determinar el tipo primitivo de una variable primitiva?

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

http://docs.oracle.com/cd/E26806_01/wlp.1034/e14255/com/bea/p13n/expression/operator/Instanceof.html