[英]Java Class class as a generic doesn't work as expected
關於類及其泛型語義的一個簡單問題。 為什么以下代碼不起作用?
Class<Serializable> s = String.class;
Java告訴我Class<Serializable>
和Class<String>
不兼容。 當String
實現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);
在此代碼之后,您將擁有一個包含Integer
對象的ArrayList <String>()-顯然這不好。
因為Class<String>
不是Class<Serializable>
。 但是Class<String>
是Class<? extends Serializable>
Class<? extends Serializable>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.