Итерация через Arraylist с расширенными классами

Я задавался вопросом о функции в Java, которая, я надеюсь, существует. Я хочу перебирать Arraylist (скажем, класса A), который содержит объекты классов B и C, которые оба расширяют A. Идея, я хочу перебирать только (например) объекты класса B в ArrayList.

Как это возможно, как короткий пример в коде ниже, и без длинного?

Основной класс:

     import java.util.*;

public class Test {

    public static void main(String[] args) {
        new Test ();
    }

    Test() {
        ArrayList<A> a = new ArrayList<A> ();
        a.add (new B ());
        a.add (new C ());
        a.add (new C ());
        a.add (new B ());
        a.add (new C ());
        for (A aObject : a) { // this works, I want it shorter
            if (aObject instanceof B) {
                B b = (B) aObject;
                System.out.println (b.hi);
            }
        }
        for (B b : a) // like this?
            System.out.println (b.hi);
    }
}

A:

public class A {

}

B:

public class B extends A {
    String hi = "hi";
}

C:

public class C extends A {

}

EDIT: Потому что так много людей отвечают на этот вопрос: Я знаю об использовании instanceof. Мне нужен более быстрый способ перебора всех объектов в массиве, класс которого B.

5
задан Daniel Fischer 9 May 2012 в 14:58
поделиться