クラスFoo、クラスAおよびサブクラスBがあるとします。FooはAおよびそのサブクラスをジェネリック型として受け取ります。 AとBの両方とも、そのコンストラクタにFooインスタンスが必要です。 、XはいずれかのAの場合Java:サブクラス化で汎用ワイルドカードを使用する
Foo<X> bar = new Foo<X>;
new B(bar);
が可能であるために:私はAさんのFooがタイプAのようにしたい、とBのfooがタイプBまたはSO効果でBのスーパークラスであることが、だから私はこれだけをしたいですB、またはAのサブクラスとB.
のスーパークラスこれまでのところ、これは私が持っているものです両方:
class Foo<? extends A>{
//construct
}
class A(Foo<A> bar){
//construct
}
class B(Foo<? super B> bar){
super(bar);
//construct
}
super(...)
への呼び出しが動作しない、<A>
が<? super B>
よりも厳しいですので。これらの型を強制しながら、コンストラクタを使用する(あるいは別の手段でコードの重複を避ける)ことは、何とかできますか?
編集:Fooはジェネリックパラメータタイプの要素のコレクションを保持し、これらの要素とFooは双方向リンクを持ちます。したがって、AをFooにリンクすることはできません。
実際のコードではありません。 –
はい、単純化したコードです。私は何かを逃したと思いますか? – gibberish