Java - 比较类?

2022-09-04 05:05:26

如何比较2个班级?

下面的 if 语句永远不会通过,尽管类是 MyClass 的类型:

public void(Class class) {
   if (class == MyClass.class){

   }
}

答案 1
if (clazz.equals(MyClass.class)) {

}

顺便说一句,类是一个保留字。


答案 2

测试是否为 (子) 类型的 doclazzMyClass

MyClass.class.isAssignableFrom(clazz)

From the javadoc for Class.isAssignableFrom

确定此 Class 对象所表示的类或接口是否与指定的 Class 参数所表示的类或接口相同,或者是否是其超类或超接口。如果是这样,则返回 true;否则,它将返回 false。如果此 Class 对象表示基元类型,则当指定的 Class 参数恰好是此 Class 对象时,此方法返回 true;否则,它将返回 false。

具体而言,此方法测试指定的 Class 参数所表示的类型是否可以通过标识转换或通过加宽引用转换转换为此 Class 对象所表示的类型。有关详细信息,请参阅 Java 语言规范 5.1.1 和 5.1.4 节。

所以

Object.class.isAssignableFrom(String.class)

是真的,因为每个也是一个但是StringObject

String.class.isAssignableFrom(Object.class)

为 false,因为并非所有 s 都是 s。ObjectString


“”这个名字来自这样一个事实,isAssignableFrom

Class1 x = (Class2) null;

只有在以下情况下才合法

Class1.class.isAssignableFrom(Class2.class)

也就是说,我们可以为具有静态类型的字段或变量分配一个值,该值来自静态类型为 .Class1Class2


推荐