使用List.addAll添加List <?的编译时错误将BaseClass>扩
发布时间:2020-12-15 04:34:53 所属栏目:Java 来源:网络整理
导读:在此代码中,最后一行(list1.addAll(list2);)生成编译时错误 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 ? ext
在此代码中,最后一行(list1.addAll(list2);)生成编译时错误
我确实意识到,如果允许这样做,就可以添加到不同类的相同列表实例.但是我不知道什么是正确的方法. 我的getList()方法需要返回BaseClass的子类,我不能改变那个要求. 我有这两个列表,以相同的方式声明并包含相同类型的对象,我需要在另一个列表中添加一个. BaseClass.java: package main; public class BaseClass {} 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>)". } } 解决方法
你可以制作一个新的List< BaseClass>并添加两个列表:
List<BaseClass> merged = new ArrayList<>(); merged.addAll(list1); merged.addAll(lise2); 但是让getList返回List< BaseClass>可能是个更好的主意. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |