[英]Use of extends keyword in generics
我正在嘗試這個 -
List<? extends Integer> l = new ArrayList<Integer>();
l.add(10);
和編譯器說 -
The method add(int, capture#1-of ? extends Integer) in the type List<capture#1-of ? extends Integer> is not applicable for the arguments (int)
為什么我無法在整數列表中添加整數,為什么編譯器在第一行本身沒有抱怨如果我無法添加整數?
List<? extends Integer>
List<? extends Integer>
表示延伸一些未知類型的列表Integer
。 忘記Integer
final
的那一刻,在運行時它可能是某個子類型MyImaginaryInteger
的列表,在這種情況下你不能添加Integer
10,因為這會破壞類型的安全性。 這就是編譯器不允許您添加元素的原因。
另一方面, List<? super Integer>
List<? super Integer>
表示某個未知類型的列表,它是Integer
的父類。 在這種情況下,添加Integer
值10是正常的,因為無論該類型在運行時是什么, Integer
都是它的子類型。
在您的具體情況下,根本沒有這個通配符 - 只需將其聲明為List<Integer>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.