[英]Unexpected behavior using generics with Java Collections
我剛剛意識到的事情很奇怪:
Java文檔指出List集合具有方法T get(int index)...如您所見,該方法返回T
但是我可以做到:
List<Integer> l1 = new ArrayList<>();
l1.add(1);
List l2 = l1;
l2.add("Hello my friend");
Object o2 = l1.get(1);
System.out.println(o2);
結果是“你好我的朋友”! ...這不符合文檔中所述,因為結果應為Integer!
還有其他可能的解釋嗎?
泛型是編譯時檢查。 一旦開始使用原始類型,所有賭注都將關閉。 這就是為什么原始類型很危險,並且絕對不能在新代碼中使用的原因。
List l2
不是通用的,因此它基本上是List<Object>
,當您使用非通用列表時,添加到列表中的所有內容都將成為Object
,由您來正確使用它們,否則您將得到ClassCastException
。
如果您將l2聲明為泛型,那么您將得到一個編譯時錯誤(如果您的編譯器配置為抱怨這些事情)。
final List<Integer> l2 = l1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.