2011-12-18 82 views
0

關於Class及其泛型語義的一個簡單問題。爲什麼沒有下面的代碼工作?作爲泛型的Java Class類不能按預期工作

Class<Serializable> s = String.class; 

的Java告訴我,Class<Serializable>Class<String>是不相容的。當String正在實施Serializable時,他們怎麼可能?

不應該泛型允許這種類型的東西嗎?

回答

3

因爲Class<String>不是Class<Serializable>。但是Class<String>Class<? extends Serializable>

+0

哦,我不知道'?extends'語義。謝謝! – 2011-12-18 03:45:40

3

不,沒有,泛型明確不要允許這種事情。經典的例子是某種集合類。如果ArrayList<String>是的ArrayList<Serializable>一個子類,那麼你可以寫

ArrayList<String> astr = new ArrayList<String>(); 
ArrayList<Serializable> aser = astr; 
aser.add(new Integer()); 
// This will throw ClassCastException! 
String str = astr.get(0); 

此代碼後,你有一個ArrayList <字符串>()含有Integer對象 - 顯然這是不好的。