我的类类型有问题。我有一个超类“ Edible”和一个接口“ Colorful”。并非所有可食用物品都是彩色的,因此仅在某些可食用的对象上才能实现彩色。我正在尝试获取可食用项目的ArrayList,循环遍历,并返回仅包含彩色项目的新ArrayList。我现在收到的错误是

“ ArrayList类型的方法add(Colorful)不适用于自变量(可食用)”

我如何解决这个限制?

private ArrayList<Edible> elist;
private ArrayList<Colorful> clist;

public List<Colorful> getColorfulItems(){
    for(Edible x : elist)
        if(x instanceof Colorful){
            clist.add(x);
        }
    return clist;

    }

最佳答案

您需要将Edible转换为Colorful:-

if(x instanceof Colorful){
        clist.add((Colorful)x);
}


或者,如果要避免输入大小写,请使用WildCard声明ArrayList:-

private ArrayList<? extends Colorful> clist;


通过这样声明您的ArrayList,您可以添加subtypeColorful的任何内容,而无需typecasting

另外,由于列表被声明为instance variable,因此您无需每次都返回修改后的列表。因此,更改将反映在列表中,而不返回列表。

09-27 15:31