如果我有一個水果列表,包含各種Fruit
實現,如Apple
,Banana
等。該列表是必要的,因爲其他方法對列表中的所有水果執行一般操作。如何獲取列表中特定類型的所有對象?
如何從列表中獲取特定類型的所有對象?比如所有的蘋果?做instanceof/if-else檢查非常難看,特別是當有很多類不同時。
如何改進以下內容?
class Fruit;
class Apple extends Fruit;
class Banana extends Fruit;
class FruitStore {
private List<Fruit> fruits;
public List<Apple> getApples() {
List<Apple> apples = new ArrayList<Apple>();
for (Fruit fruit : fruits) {
if (fruit instanceof Apple) {
apples.add((Apple) fruit);
}
}
return apples;
}
}
是不是'instanceof'是如何按類型告訴對象的顯而易見的方式?它工作,使用它。 – millimoose 2013-03-16 18:18:18
或者,使用訪問者模式或其他多態性應用程序來避免必須首先過濾列表。 – millimoose 2013-03-16 18:18:48
另外,你可以使用'HashMap'作爲'水果類型名稱'的鍵值和作爲'水果'對象的'ArrayList'值 – 2013-03-16 18:20:37