ネストされたワイルドカード境界型を持つ境界型パラメーターを持つクラスがあります。クラスでは、バインドされたネストされたパラメーターの型を複数のメソッドで使用する必要があります。複数の場所で簡単に参照できるように、代わりにワイルドカード境界型をジェネリック型パラメーターとして定義するか、ジェネリック変数名に割り当てる方法はありますか?
クラスの実装方法は次のようになります
class AbstractManager<F extends Filter<? extends Criteria<? extends Type>>>
{
protected void setFilter(F filter)
{
setCriteria(f.getCriteria());
}
protected <T extends Criteria<? extends Type>> void setCriteria(List<T> criteria)
{
}
protected <T extends Criteria<? extends Type>> void doSomethingWithCriteria(List<T> criteria)
{
...
}
}
これは実際にはリストのタイプをフィルターのタイプに制限しませんが、私たちの状況では十分です。理想的には、リストの型は、フィルターの推論された型をメソッドの境界付き型パラメーターのように名前にバインドできる構造体を使用してフィルターの型に制限されますが、代わりにクラス レベルで制限されます。
基本的に私は次のようなことをしたいと思います
class <G extends Criteria<? extends Type> AbstractManager<F extends Filter<G>>
私が知っていて見つけることができることから、これは不可能ですが、これを可能にするあいまいな機能またはJava 7の新機能がおそらくあることを望んでいました. 次のような2番目の型パラメーターを指定できることは知っています
class AbstractManager<F extends Filter<G>, G extends Criteria<? extends Type>>
しかし、コンパイラが決定できるときに、子クラスで G を指定する必要はありません。
私が見つけることができた唯一の可能なオプション/解決策は、この質問 の解決策で指定されたファクトリメソッドを持つ浅いサブクラスを持つことですJava および Javaジェネリックのネストされた型パラメーター-同じワイルドカードを複数回使用します