You have a few options.
- You could use reflection
- You could use
instanceof
- You could use the visitor pattern
For these examples, we will attempt to find the type of this variable:
Object obj = new TargetType();
We want to see if the object referenced by obj
is of type TargetType
.
Reflection
There are a couple ways you could do this:
if(obj == TargetType.class) {
//do something
}
The idea behind the code above is that getClass()
returns a reference to the Class
object used to instantiate that object. You can compare the reference.
if(TargetType.class.isInstance(obj)) {
//do something
}
Class#isInstance
checks to see if the object value passed to method is an instance of the class we are calling isInstance
on. It will return false
if obj
null, so no null check is needed. This requires casting to perform operations on the object.
instanceof
This one is simple:
if(obj instanceof TargetType) {
//do something
}
instanceof
is part of the language specification. This returns false
if obj
is null. This requires casting to perform operations on the object.
Visitor Pattern
I have explained this in detail in one of my other answers. You would be in charge of handling null
. You should look deeper into the pattern to see if it's right for your situation, as it could be an overkill. This does not require casting.