Java 如何在Arraylist?

Java 如何在Arraylist?,java,generics,arraylist,numbers,wildcard,Java,Generics,Arraylist,Numbers,Wildcard,我正在尝试使用扩展Number类的通配符向Arraylist添加一个整数。编译器给了我一个错误。我不知道如何解决这个问题 导入java.util.ArrayList; 公共类通配符{ ArrayList这样做就可以添加整数了 ArrayList<Number> an; 而不是 ArrayList<? extends Number> an 将通配符?更改为T: 不可能 这就是通配符的意思 你在问:我如何找到这个圆的角?-或者我如何移动一个不动的物体 通配符表示:无法添加

我正在尝试使用扩展Number类的通配符向Arraylist添加一个整数。编译器给了我一个错误。我不知道如何解决这个问题

导入java.util.ArrayList; 公共类通配符{
ArrayList这样做就可以添加整数了

ArrayList<Number> an;
而不是

ArrayList<? extends Number> an
将通配符?更改为T:

不可能

这就是通配符的意思

你在问:我如何找到这个圆的角?-或者我如何移动一个不动的物体

通配符表示:无法添加到

这意味着,这一简单练习突出了其原因:

List<Double> doubles = new ArrayList<Double>();
List<? extends Number> whoknows = doubles;
whoknows.add(Integer.valueOf(5));
请注意,whowknows和doubles指向完全相同的列表。这里只有一个列表;您对doubles列表所做的任何操作都会对whowknows执行,反之亦然

如果你想办法给这个加上一个整数,你就…给一个双倍表加上一个整数。哦


这就是为什么你不能。我需要在练习中使用通配符。我不同意通配符的意思是:不能添加到列表中。完全可以将元素添加到列表中。扩展通配符的意思是“不能添加到”。超级通配符的意思正好相反。答案很复杂,所以答案不正确这是一篇完整而深入的论文,内容涉及co/contra/和不变性,以及java是如何实现这些概念的。至少,除非问题是“请向我解释这些概念”。哦,不,我不是说你应该在这个答案和所有答案中解释差异。你给出的例子很好,可能就是全部你需要-我只是对这个词的意思吹毛求疵?
List<Double> doubles = new ArrayList<Double>();
List<? extends Number> whoknows = doubles;
whoknows.add(Integer.valueOf(5));