2011-06-07 106 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"); 
    } 
}