Te damos la bienvenida a nuestro sitio web, en este sitio vas a encontrar la resolución que buscas.
Solución:
olvidaste el .class
:
if (value.getClass() == Integer.class)
System.out.println("This is an Integer");
else if (value.getClass() == String.class)
System.out.println("This is a String");
else if (value.getClass() == Float.class)
System.out.println("This is a Float");
Tenga en cuenta que este tipo de código suele ser el signo de un diseño OO deficiente.
También tenga en cuenta que comparar la clase de un objeto con una clase y usar instanceof no es lo mismo. Por ejemplo:
"foo".getClass() == Object.class
es falsemientras
"foo" instanceof Object
es true.
El uso de uno u otro depende de sus requisitos.
Puede comparar tokens de clase entre sí, por lo que podría usar value.getClass() == Integer.class
. Sin embargo, la forma más simple y canónica es usar instanceof
:
if (value instanceof Integer)
System.out.println("This is an Integer");
else if(value instanceof String)
System.out.println("This is a String");
else if(value instanceof Float)
System.out.println("This is a Float");
Notas:
- la única diferencia entre los dos es que la comparación de tokens de clase detecta solo coincidencias exactas, mientras que
instanceof C
coincidencias para subclases deC
también. Sin embargo, en este caso todas las clases listadas sonfinal
, por lo que no tienen subclases. De este modoinstanceof
probablemente esté bien aquí. -
como dijo JB Nizet, tales cheques no son diseño OO. Es posible que pueda resolver este problema de una manera más OO, por ejemplo
System.out.println("This is a(n) " + value.getClass().getSimpleName());
Usted quiere instanceof
:
if (value instanceof Integer)
Esto será true incluso para subclases, que suele ser lo que quieres, y también es null-seguro. Si realmente necesita exactamente la misma clase, podría hacerlo
if (value.getClass() == Integer.class)
o
if (Integer.class.equals(value.getClass())
Tienes la posibilidad mostrar este enunciado si te valió la pena.