2015-02-06 30 views
2

爲什麼這不可能?從類型參數的類中獲取.class

List<Foo>.class

或者更多具體讓A是與一類參數的一類(即class A<T> { // code }爲什麼是new A<T>().getClass()可能的,同時A<Foo>.class編譯誤差?

+0

看到此[回答](http://stackoverflow.com/a/2160974/180100) – 2015-02-06 15:31:13

+1

另請參閱:http://stackoverflow.com/questions/2390662/java-how-do-i-get-a -class-literal-from-a-generic-type(cletus answer) – 2015-02-06 15:31:53

回答

2

在仿製藥,內<部分和>僅僅是一個選項爲通用類

在您的示例中,類是List,所以如果實例化它,您將鍵入List.class(或list.getClass())

列表<T>只是一個List,具有完全相同的類。 T只被編譯器用來檢查一致性。

0

new A<T>().getClass()返回與A.class完全相同的對象。 Class對象表示沒有通用信息的原始類型。 A<T>.class只是說謊它實際上代表什麼,所以它是不允許的。

0

我認爲這是一個公平的問題。

這工作得很好:

Class c = new ArrayList().getClass(); 
    c= ArrayList.class; 

這不:

c = new ArrayList<String>().getClass(); // still ok 
    c = ArrayList<String>.class; // compilation fails 

結果將始終是相同的使用或不使用泛型類型。

new ArrayList().getClass()相比,這個new ArrayList<String>().getClass()沒有帶來任何東西,它被接受。

ArrayList.class相比,這個ArrayList<String>.class不會帶來任何更多,而不是。

那麼,爲什麼?

也許是編譯器盡力阻止我們編寫無用的代碼。

相關問題