gpt4 book ai didi

java - 如果我实现 List 并在接受 List< 的方法中调用 add 会怎样?扩展父类(super class)型>

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:59:00 26 4
gpt4 key购买 nike

我读到以下代码片段将导致 compiler error

void tryAddingToList(List<? extends SuperType> list) {
list.add(new SubType());
}

现在我的问题是: 限制到底是谁设置的,​​限制是如何设置的?编译器是否专门检查此类方法实现中的 add 方法调用?

如果是,如果我实现自己的 List 而不是 add,引入一个新的 addToList 方法会怎么样add,并在 tryAddingToList 方法中调用它?

更好的是,如果我实现我的 get 方法,它也会“ secret 地”向列表中添加一些内容(不要问我为什么有人会那样做;我只是好奇) .

最佳答案

你应该使用 super而不是 extends在这里。

void tryAddingToList(List<? super SubType> list) {
list.add(new SubType());
}

假设有 3 种类型 SuperType , SubType1 , SubType2 .在您的原始代码中,List<? extends SuperType>可能是 List<SubType2> , 你不能添加 SubType1List<SubType2> .

关于java - 如果我实现 List 并在接受 List< 的方法中调用 add 会怎样?扩展父类(super class)型>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9442310/

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