簡體   English   中英

在泛型中使用extends關鍵字

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

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