Checking a class type (.class) is equal to some other class type

Is the following code valid?

void myMethod (Class classType) {
   if (classType == MyClass.class) {
       // do something
   }
}

myMethod (OtherClass.class);

If not is there any other approach where I can check if a passed .class (Class Type) is of type - MyClass ?


Solution 1:

Yes, that code is valid - if the two classes have been loaded by the same classloader. If you want the two classes to be treated as equal even if they've been loaded by different classloaders, possibly from different locations, based on the fully-qualified name, then just compare fully-qualified names instead.

Note that your code only considers an exact match, however - it won't provide the sort of "assignment compatibility" that (say) instanceof does when seeing whether a value refers to an object which is an instance of a given class. For that, you'd want to look at Class.isAssignableFrom.

Solution 2:

I'd rather compare the canonical names to be completely sure, classType.getCanonicalName().equals(MyClass.class.getCanonicalName()).

Note that this may bring issues with anonymous and inner classes, if you are using them you may consider using getName instead.