2011-06-07 87 views
12

我如何比较2个班级?Java - 比较类?

下面的if语句从来没有穿过虽然类是MyClass类型的:

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

    } 
} 
+4

我怀疑它编译的所有......另一方面,如果它只是伪代码,那么我没有看到任何奇怪的东西。你能粘贴实际的代码吗? – Cristian 2011-06-07 16:19:25

回答

34
if (clazz.equals(MyClass.class)) { 

} 

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

+0

'klass'也是一个常见的var名称。 – Soup 2012-11-22 08:47:26

+1

'final Class SAN_DIEGO' – 2014-01-09 21:41:21

9

为了测试是否clazz在(子)类型的MyClass

MyClass.class.isAssignableFrom(clazz) 

从Javadoc文档Class.isAssignableFrom

确定是否表示类或接口通过此Class对象与指定的Class参数表示的类或接口相同,或者是其超类或超接口。如果是的话,它返回true;否则返回false。如果此Class对象表示基本类型,则此方法返回true,如果指定的Class参数恰好是此Class对象;否则返回false。

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

所以

Object.class.isAssignableFrom(String.class) 

是真实的,因为每个String也是一个Object

String.class.isAssignableFrom(Object.class) 

是假的,因为不是所有的Object s为String秒。


命名为 “isAssignableFrom” 来自于一个事实是,

Class1 x = (Class2) null; 

是唯一合法的时候

Class1.class.isAssignableFrom(Class2.class) 

也就是说,我们可以分配字段或变量静态类型Class1值为from表达式的静态类型为Class2

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"); 
     } 
    } 
} 

演示:http://ideone.com/AwbNT

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"); 
    } 
}