How to identify object types in java
Use value instanceof YourClass
You forgot the .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");
}
Note that this kind of code is usually the sign of a poor OO design.
Also note that comparing the class of an object with a class and using instanceof is not the same thing. For example:
"foo".getClass() == Object.class
is false, whereas
"foo" instanceof Object
is true.
Whether one or the other must be used depends on your requirements.
You can compare class tokens to each other, so you could use value.getClass() == Integer.class
. However, the simpler and more canonical way is to use 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");
}
Notes:
- the only difference between the two is that comparing class tokens detects exact matches only, while
instanceof C
matches for subclasses ofC
too. However, in this case all the classes listed arefinal
, so they have no subclasses. Thusinstanceof
is probably fine here. as JB Nizet stated, such checks are not OO design. You may be able to solve this problem in a more OO way, e.g.
System.out.println("This is a(n) " + value.getClass().getSimpleName());
You want instanceof
:
if (value instanceof Integer)
This will be true even for subclasses, which is usually what you want, and it is also null-safe. If you really need the exact same class, you could do
if (value.getClass() == Integer.class)
or
if (Integer.class.equals(value.getClass())