私はJavaでの機能について疑問に思っていました。私はAを拡張するクラスBとCのオブジェクトを含むArraylist(クラスA)を繰り返したいと思います。このアイデアは、ArrayList内の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 {
}
編集:非常に多くの人々がこれに答えているので、私はinstanceofの使用を知っています。あなたは、再利用可能なフィルターを作ることができる
for (B b: Iterables.filter(a, B.class)) {
System.out.println (b.hi);
}
すべてのリストを繰り返し、リストのすべてのオブジェクトが目的のクラスであるかどうかをチェックする必要があります。あなたは以下の答えですでに述べたように、キーケースの "インスタンス"を見たいかもしれません...しかし、私はコードがあなたのものと似ているのではないかと心配しています(しかし、アプローチの例はより良い/クリーナーです) – Pitelk
それを編集する前の質問は、あなたが求めていたことは明らかではありませんでした。 – JRSofty