我有两个这样的arraylists:
ArrayList<Book> books=new ArrayList<Book>();
ArrayList<Painting> paintings=new ArrayList<Painting>();
书籍和绘画是课程。我想像这样定义一个函数addToList:
public void addToList(Object myObject)
{
if(myObject instanceof Book)
books.add(myObject);
else if(myObject instanceof Painting)
paintings.add(myObject);
}
但它显示了一个错误 方法ArrayList中的add(Painting)方法不适用于参数(Object)
ArrayList类型中的add(Book)方法不适用于参数(Object)
有没有办法解决这个问题?为什么错误发生,因为我将每个add语句放在if else循环中,确认相应类的对象应该添加到相应的arraylist中?
我可以通过将add函数拆分为两个不同的add函数来完成此操作,其中一个作为参数绘制myObject,另一个作为Book myObject,但我想在同一个函数中完成所有操作。可以吗?
答案 0 :(得分:4)
您需要先将对象强制转换paintings.add((Painting)myObject);
,通用ArrayList<Painting>
禁止您添加它,因为它需要继承类Paint并且抛出编译器错误,因为generell类对象不满足此条件
答案 1 :(得分:2)
由于您使用的是泛型,因此您不能这样做,您需要将其强制转换:
if(myObject instanceof Book)
books.add((Book)myObject);
else if(myObject instanceof Painting)
paintings.add((Painting)myObject);