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)
您需要将您的类型转换Edible为Colorful: -
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这样,你可以添加任何东西,是subtype的Colorful,而不typecasting
此外,您不需要每次都返回修改后的列表,因为您的列表被声明为instance variable.因此,更改将反映在列表中,而不返回列表.