關於Class及其泛型語義的一個簡單問題。爲什麼沒有下面的代碼工作?作爲泛型的Java Class類不能按預期工作
Class<Serializable> s = String.class;
的Java告訴我,Class<Serializable>
和Class<String>
是不相容的。當String
正在實施Serializable
時,他們怎麼可能?
不應該泛型允許這種類型的東西嗎?
關於Class及其泛型語義的一個簡單問題。爲什麼沒有下面的代碼工作?作爲泛型的Java Class類不能按預期工作
Class<Serializable> s = String.class;
的Java告訴我,Class<Serializable>
和Class<String>
是不相容的。當String
正在實施Serializable
時,他們怎麼可能?
不應該泛型允許這種類型的東西嗎?
因爲Class<String>
不是Class<Serializable>
。但是Class<String>
是Class<? extends Serializable>
不,沒有,泛型明確不要允許這種事情。經典的例子是某種集合類。如果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
對象 - 顯然這是不好的。
哦,我不知道'?extends'語義。謝謝! – 2011-12-18 03:45:40