I’m having a problem with class types. I have a super class “Edible” and an interface “Colorful”. Not all edible items are colorful so colorful is only implemented on certain Edible objects. I’m trying to take an ArrayList of Edible items, loop through it, and return a new ArrayList that contains only the colorful ones. The error I’m receiving now is
“The method add(Colorful) in the type ArrayList is not applicable for the arguments (Edible)”
How can I get around this restriction?
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;
}
You need to typecast your
EdibletoColorful: –Or, if you want to avoid typecase, declare your ArrayList with
WildCard: –By declaring your
ArrayListlike this, you can add anything that is asubtypeofColorfulwithouttypecastingAlso, you don’t need to return your modified list everytime, since your list is declared as
instance variable. So the change will be reflected in the list, without returning the list.