在此代码中,最后一行(list1.addAll(list2);)生成编译时错误
方法addAll(Collection <?extends capture#3-of?extends BaseClass>)在List <capture#3-of?中?extends BaseClass>不适用于参数(List <capture#4-of?extends BaseClass>)
我确实意识到,如果允许这样做,就可以添加到不同类的相同列表实例.但是我不知道正确的方法是什么.
我的getList()方法需要返回子类BaseClass,我不能改变那个要求.
我有这两个列表,以相同的方式声明并包含相同类型的对象,我需要在另一个列表中添加一个.任何有关这方面的想法将不胜感激.
BaseClass.java:
package main;
public class BaseClass {}
Run Code Online (Sandbox Code Playgroud)
Main.java:
package main;
import java.util.ArrayList;
import java.util.List;
public class Main {
private static List<? extends BaseClass> getList() {
return new ArrayList<>();
}
public static void main(String[] args) {
List<? extends BaseClass> list1 = getList();
List<? extends BaseClass> list2 = getList();
list1.addAll(list2); // Compile-time error: "The method addAll(Collection<? extends capture#3-of ? extends BaseClass>) in the type List<capture#3-of ? extends BaseClass> is not applicable for the arguments (List<capture#4-of ? extends BaseClass>)".
}
}
Run Code Online (Sandbox Code Playgroud)
你可以创建一个新的List<BaseClass>并添加两个列表:
List<BaseClass> merged = new ArrayList<>();
merged.addAll(list1);
merged.addAll(lise2);
Run Code Online (Sandbox Code Playgroud)
但getList返回a 可能是个更好的主意List<BaseClass>.
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |