以下代码是否有效?
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.
我宁愿比较规范名称以完全确定,classType.getCanonicalName().equals(MyClass.class.getCanonicalName())。
请注意,这可能会带来匿名类和内部类的问题,如果您正在使用它们,您可以考虑使用 getName 代替。
| 归档时间: |
|
| 查看次数: |
42095 次 |
| 最近记录: |