簡體   English   中英

Java通用通配符擴展

[英]Java generic wildcard extend

為什么即使Integer擴展了Number>,我也不能向該類型的列表添加整數

List<? extends Number> numList = new ArrayList<Integer>(); 
Integer f = 12;
numList.add(f);

看看這篇關於PECS原理的文章。 相關報價:

您想將東西添加到集合中。
那么列表是一個消費者,因此您應該使用Collection<? super Thing> Collection<? super Thing>

簡而言之,您將要使用super而不是extends

List<? super Number> numList = new ArrayList<>(); 
Integer f = 12;
numList.add(f);

如果要存儲任何類型的號碼,只需執行以下操作:

List<Number> numList = new ArrayList<Number>();

如果要向列表中添加元素,則需要使用super關鍵字。

List<? super Integer> numList = new ArrayList<Integer>(); 

然后做

 numList.add(10);

該列表可以定義為列表,也可以定義其他類型的列表,在這種情況下,編譯器不允許將整數存儲到列表中:這會在類型安全功能中造成問題。

如果您需要,您可以使用此

List<Number> numList = new ArrayList<Number>();
        Integer f = 100;
        numList.add(f);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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