我如何比较2个班级?
虽然class是MyClass的类型,但以下if语句永远不会传递:
public void(Class class) {
if (class == MyClass.class){
}
}
答案 0 :(得分:35)
if (clazz.equals(MyClass.class)) {
}
顺便说一句,班级是一个保留词。
答案 1 :(得分:10)
测试clazz
是否为MyClass
的(子)类型
MyClass.class.isAssignableFrom(clazz)
的javadoc
确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。如果是这样,它返回true;否则返回false。如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true。否则返回false。
具体来说,此方法测试是否可以通过标识转换或扩展引用转换将指定的Class参数表示的类型转换为此Class对象表示的类型。有关详细信息,请参阅Java语言规范,第5.1.1和5.1.4节。
所以
Object.class.isAssignableFrom(String.class)
是正确的,因为每个String
也是Object
但
String.class.isAssignableFrom(Object.class)
是错误的,因为并非所有Object
都是String
s。
名称“isAssignableFrom
”来自
Class1 x = (Class2) null;
只有合法时才
Class1.class.isAssignableFrom(Class2.class)
也就是说,我们可以指定带有静态类型Class1
的字段或变量,该值来自来自的静态类型为Class2
的表达式
答案 2 :(得分:7)
您可以使用==
或.equals()
来比较Class
个对象。
示例:
class MyClass
{
public static void main (String[] args) throws java.lang.Exception
{
MyClass m = new MyClass();
if (MyClass.class == m.getClass())
{
System.out.println("it worked");
}
}
}
答案 3 :(得分:6)
您可以使用instanceof
运算符来检查实例是否属于特定类或其子类。
class MyClass{}
class SubClass extends MyClass{}
public static void main(String args[]) {
SubClass object = new SubClass();
if (object instanceof MyClass) {
System.out.println("It works, too");
}
}