我的类类型有问题。我有一个超类“ 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
,您可以添加subtype
中Colorful
的任何内容,而无需typecasting
另外,由于列表被声明为
instance variable
,因此您无需每次都返回修改后的列表。因此,更改将反映在列表中,而不返回列表。