gpt4 book ai didi

java - 泛型 - 无法添加到具有无限通配符的列表

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:35:20 25 4
gpt4 key购买 nike

我实例化以下列表:

// I am just revising generics again and the following is just cursory code!
List<? super Integer> someList = new ArrayList<Object>();
someList.add(new Object());

上面的方法是行不通的。我收到编译器错误。但是,以下工作:

List<? super Integer> someList = new ArrayList<Object>();
someList.add(11);

我知道您可以将对象添加到包含无界通配符而非有界通配符的集合。

但是,为什么以上不起作用?对象是整数的父类(super class)型,为什么我不能添加它?

最佳答案

这声明它是一个 Integer 父类(super class)型的列表,而不是该列表可以包含 Integer 父类(super class)型的任何内容。换句话说,对于编译器来说,它可能是一个 List<Integer>。 , 一个 List<Number>List<Object> ,但它不知道是哪一个,因此您不能向列表中添加任何内容。唯一可以安全添加的是 Integer,因为它保证是 List 可能包含的任何类型的子类型。

换句话说,?代表一个类型,而不是任何类型。这是一个不明显但很重要的区别。

关于java - 泛型 - 无法添加到具有无限通配符的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637125/

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