2

、などのすべての種類のFruit実装を含む果物のリストがある場合。他のメソッドがリスト内のすべての果物に対して一般的なアクションを実行するため、リストが必要です。AppleBanana

特定のタイプのすべてのオブジェクトをリストから取得するにはどうすればよいですか?たとえば、すべてのリンゴ?特に異なるクラスがたくさんある場合、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 に答える