2015-08-13 20 views
0

什麼時候應該讓方法調用JavaClass.class作爲參數?我經常看到類似下面的代碼,但我不明白:方法調用具有.class作爲參數?

String foo(Baar bar) { ... } 

foo(Baar.class) 
+2

這在語法上不正確。請提供具體/真實的例子。 –

+0

簡短的方法採取類< T >作爲參數想要關於類型的信息,而不是類型T的實例 –

回答

0

在java中,你可以聲明方法期待Class類型的參數。像

String foo(Class<Baar> bar) { ... } 

調用方法的方式事情是:

Baar bar = new Baar(); 
foo(bar.getClass()); 

或者類似的東西

foo(Bar.class); 

型類的參數可以通過以各種理由功能foo()使用:它可以使用實例化一個相同類型的新對象

String foo(Class<Baar> bar) { 
    Baar barInstance = bar.newInstance(); 
} 

它也可以在if-then-else塊中使用它根據類的類型採取特定的操作。

String foo(Class<?> bar) { 
    if (bar == Baar.class) { 
    System.out.println("Baar type received."); 
    } 
} 

請注意,期望Class對象的函數的方法簽名必須明確地聲明如此。否則會導致編譯時錯誤;就像你的情況一樣。在你的情況下,函數foo需要一個Baar對象。你不能傳遞它一個Baar.class引用。

1

當方法需要Class作爲參數。

例如,EnumSet.allOf(Class<E> elementType)預計枚舉(而不是一個枚舉實例)作爲參數。因此,假設Season是一個枚舉,你怎麼稱呼它使用

EnumSet.allOf(Season.class) 

在您的例子,有沒有辦法可以傳遞Baar.class作爲參數傳遞給foo(),因爲foo()預計一巴爾實例作爲參數。所以,你需要的是像

Baar baar = new Baar(); 
foo(baar); 
+0

謝謝:)現在我明白了 –

相關問題