Zastanawiam się nad funkcją w Javie, która, mam nadzieję, istnieje. Chcę iterować przez Arraylist (powiedzmy klasy A), która zawiera obiekty klasy B i C, które oba rozszerzają A. Pomysł, chcę tylko iteracji (na przykład) obiektów klasy B w ArrayList.Iterowanie poprzez Arraylist z rozszerzonymi klasami
Jak to jest możliwe, jak na przykład w poniższym kodzie i bez długiego?
Główna klasa:
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: Ponieważ tak wiele osób odpowiada na to: Wiem o używaniu instanceof. Chcę szybszą drogę do pętli wszystkich obiektów w tablicy, której klasa jest B.
Musisz powtórzyć całą listę i każdy obiekt na liście, aby sprawdzić, czy należy do klasy, którą chcesz. Możesz zajrzeć do keywork "instancji" jak już wspomniano w odpowiedzi poniżej ... ale obawiam się, że kod będzie podobny do tego, który masz (ale instancja podejścia jest lepsza/czystsza) – Pitelk
The pytanie, zanim edytowałeś, nie było jasne, o co prosiłeś. – JRSofty