检查类类型(.class)等于其他类类型

Fah*_*him 35 java reflection

以下代码是否有效?

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

myMethod (OtherClass.class);
Run Code Online (Sandbox Code Playgroud)

如果没有,那么我可以检查传递的.class(Class Type)类型是否为MyClass?

感谢名单!

Jon*_*eet 49

是的,该代码是有效的 - 如果这两个类已由同一个类加载器加载.如果您希望将两个类视为相等,即使它们已被不同的类加载器(可能来自不同的位置)加载,也可能基于完全限定的名称,而只是比较完全限定的名称.

请注意,您的代码只考虑完全匹配,但是 - 它不会提供"分配兼容性",instanceof当(例如)在查看值是否引用作为给定类的实例的对象时.为此,你想看看Class.isAssignableFrom.


Sla*_*ash 5

我宁愿比较规范名称以完全确定,classType.getCanonicalName().equals(MyClass.class.getCanonicalName())。

请注意,这可能会带来匿名类和内部类的问题,如果您正在使用它们,您可以考虑使用 getName 代替。