java - 泛型,设置 ArrayList<?将 Option> 扩展到 ArrayList<OptionChild>

标签 java generics

我有这个伪代码:

Example A
Interface Option
Class OptionImplementer implements Option
ArrayList<ArrayList<? extends Option>> test = new ArrayList<ArrayList<OptionImplementer>>(); <-- Fails?

为什么会失败? Child 确实实现了 Option,我也尝试了 Super 关键字而不是 extends。

作为“奖励”问题,假设这些构造函数签名具有相同的删除:

 Example B
    public void test(ArrayList<ArrayList<? extends Option>> test) {

}
public void test(ArrayList<ArrayList<OptionImplementer>> test) {

}

示例 A 或 B 应该有效。 A 失败了,所以 B 应该可以工作...

最佳答案

你确定它失败了吗?它不应该,当我尝试这个时它不会:

interface Option {}
class Child implements Option {}

public class Example {
    public static void main(String[] args) {
        ArrayList<? extends Option> list = new ArrayList<Child>();
    }
}

但是请注意,如果这样写,则不能向 list 添加任何内容。为什么你不能添加到这样的列表之前已经被问过很多次,例如:

关于java - 泛型,设置 ArrayList<?将 Option> 扩展到 ArrayList<OptionChild>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13010660/

相关文章:

java - 没有使用 emma、junit 和 ant 的运行时覆盖

java - 我可以使用调用类中的泛型类型吗?

c# - 泛型类中的隐式类型参数

java - 如何在java中计算字符串格式的大数模

java - 禁用 Apache Flink 日志记录

java - 转换为通用类型时 Java 中的警告

java - 了解泛型以及类型检查的工作原理

c# - 在 C# 中创建自定义泛型列表

generics - 在通用结构实现中将文字转换为关联类型

java - 使用 SSPI : no errors, 进行 Kerberos 模拟但不起作用