gpt4 book ai didi

Java匿名泛型继承

转载 作者:行者123 更新时间:2023-12-03 21:45:41 26 4
gpt4 key购买 nike

看下一段代码:

ArrayList<? extends Object> list = new ArrayList<Object>();
list.add(new Object());

它不编译。问题是为什么?

最佳答案

ArrayList<? extends Object>

和刚才一样

ArrayList<?>

并且您可以将任何 ArrayList 分配给这种类型的变量。例如,

ArrayList<? extends Object> list = new ArrayList<String>();

是合法的。显然,语言语义不允许您将 Object 添加到这样的列表中。事实上,它们不允许您向其中添加任何内容null 或您直接从列表中检索到的内容除外。

正如 Lukas 在评论中指出的那样,将列表自己的项目添加回其中绝非易事:您需要一个辅助方法来将通配符捕获到命名类型中。

public static void main(String[] args) {
ArrayList<? extends Object> list = new ArrayList<String>();
addOwn(list);
}
static <T> void addOwn(List<T> l) { l.add(l.get(0)); }

关于Java匿名泛型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20163592/

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