簡體   English   中英

在Java集合中使用泛型的意外行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM