2

如果我有一个水果列表,其中包含各种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;
    }
}
4

2 回答 2

1

您应该知道 - 实例是代码的不良做法。

写.getType(),返回枚举类型的对象怎么样?

于 2013-03-16T18:46:48.063 回答
0

你使方法通用:

public <T extends Fruit> List<T> getFruitsByType(Class<T> fType) {
    List<T> list = new ArrayList<T>();
    for (Fruit fruit : fruits) {
        if (fruit.getClass() ==  fType) {
            list.add(fType.cast(fruit));
        }
    }
    return list;
}

并按如下方式使用它:

FruitStore fs = new FruitStore();
List<Apple> apples = fs.getFruitsByType(Apple.class);
于 2013-03-16T18:35:00.950 回答