迭代ArrayList并返回满足instanceof检查的对象的ArrayList

Sea*_*rty 1 java interface arraylist instanceof superclass

我的班级类型有问题.我有一个超级"可食用"和一个界面"多彩".并非所有可食用的物品都是五彩缤纷的,所以只有在某些可食用物品上才能实现.我正在尝试使用一个可食物项的ArrayList,循环它,并返回一个只包含彩色项目的新ArrayList.我现在收到的错误是

"ArrayList类型中的方法add(Colorful)不适用于参数(Edible)"

我怎样才能解决这个限制?

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;

    }
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 5

您需要将您的类型转换EdibleColorful: -

if(x instanceof Colorful){
        clist.add((Colorful)x);
}
Run Code Online (Sandbox Code Playgroud)

或者,如果要避免使用类型转换,请使用WildCard以下命令声明ArrayList : -

private ArrayList<? extends Colorful> clist;
Run Code Online (Sandbox Code Playgroud)

通过声明你ArrayList这样,你可以添加任何东西,是subtypeColorful,而不typecasting

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