0
では、次のしていると仮定します。のJava - ジェネリッククラスのコレクション、異なるジェネリック型を持つ各
@AllArgsConstructor
public class Foo<A> {
A a;
}
し、次のしている:
Foo<String> fooString = new Foo<>("abc");
Foo<Integer> fooInteger = new Foo<>(10);
List<Foo> foos = new ArrayList<>();
foos.add(fooString);
foos.add(fooInteger);
そして、私はリストをループにしたいですof foos
for (Foo foo : foos) {
...
}
まず、これを達成する別の方法はありますか?
次に、リスト内の各fooオブジェクトの汎用タイプをどのように参照しますか?私はワイルドカードで試してみましたが、コンパイルエラー "キャプチャ#1-of-?..."が発生しました。
"次に、リスト内の各fooオブジェクトの汎用タイプをどのように参照するのですか?" - なぜこれをしたいのですか?あなたの目標は何ですか?これを実現する別の方法については、あなたのFooクラスは実際にはあまり効果がないので、リスト
'Foo'を単独で使うと、* raw *ジェネリックを使用しています。それをしないでください。リストに 'Foo'と 'Foo 'の両方が含まれるようにするには 'List >'と宣言してください。ループは 'for(Foo > foo:foos)'でなければなりません。混合リストを作成するときには誰もが持っている通常の問題があります: 'instanceof'を呼び出すと、それぞれの値の型が分かりません。したがって、ループ内に 'if(foo.getA()instanceof String){...} 'のようなコードが必要です。これは一般的には悪い考えです。 –
Andreas