爲什麼這不可能?從類型參數的類中獲取.class
List<Foo>.class
或者更多具體讓A
是與一類參數的一類(即class A<T> { // code }
爲什麼是new A<T>().getClass()
可能的,同時A<Foo>.class
編譯誤差?
爲什麼這不可能?從類型參數的類中獲取.class
List<Foo>.class
或者更多具體讓A
是與一類參數的一類(即class A<T> { // code }
爲什麼是new A<T>().getClass()
可能的,同時A<Foo>.class
編譯誤差?
在仿製藥,內<部分和>僅僅是一個選項爲通用類
在您的示例中,類是List,所以如果實例化它,您將鍵入List.class(或list.getClass())
列表<T>只是一個List,具有完全相同的類。 T只被編譯器用來檢查一致性。
new A<T>().getClass()
返回與A.class
完全相同的對象。 Class
對象表示沒有通用信息的原始類型。 A<T>.class
只是說謊它實際上代表什麼,所以它是不允許的。
我認爲這是一個公平的問題。
這工作得很好:
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
不會帶來任何更多,而不是。
那麼,爲什麼?
也許是編譯器盡力阻止我們編寫無用的代碼。
看到此[回答](http://stackoverflow.com/a/2160974/180100) – 2015-02-06 15:31:13
另請參閱: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