gpt4 book ai didi

java - "? extends ParentClass"使只读?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:51 25 4
gpt4 key购买 nike

在下面的 Java 代码中,我创建了一个列表 nums。我可以在声明期间分配另一个列表。但是除了null 之外不能添加新项目。那么,这是否意味着 nums 是只读的? 为什么?是否可以在该列表中添加新项目?

List<Integer> ints = new ArrayList<Integer>();
ints.add(1);
ints.add(2);

List<? extends Number> nums = ints;
nums.add(3.14); //Generates error
nums.addAll(ints); //Generates error

nums.add(null); //works
System.out.println(nums.get(0)); //works

我已经完成了这个link .我无法得到确切的原因。

最佳答案

Is it possible to add new items in that list?

不...因为该代码不知道它“实际上”是什么列表。想象一下,如果您可以:

List<String> strings = new ArrayList<>();
List<? extends Object> objects = strings; // This is fine
objects.add(new Object()); // Fortunately this *isn't* valid...
System.out.println(strings.get(0).length()); // Or what would this do?

基本上,当您使用像 这样的通配符时? extends T 您只能通过 API 获取值 out...并且当您使用像 这样的通配符时? super T,您只能通过 API 将值放入 - 因为那是安全的。

关于java - "? extends ParentClass"使只读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32614436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com