仅从ArrayList获取子类项

ᴘᴀɴ*_*ᴛɪs 0 java arraylist

我有一个ArrayList<Item> items和两个继承的类Item,它们是BookDVD.我在项目列表中添加了一些书籍和一些dvds

items.add(new Book());
items.add(new DVD());
Run Code Online (Sandbox Code Playgroud)

现在我想做一个

public void printAllBooks()
{
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能选择仅打印Item的子类Book

dka*_*zel 5

如果您被迫使用组合列表,您可以使用instanceof它来检查它是否是一本书.

public void printAllBooks()
{
    for(Item i : items){
        if(i instanceof Book){
            System.out.println(i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但更好的设计可能是拥有单独的书籍和DVD列表