Javaジェネリックで次の型関係をどのように表現しますか:
class MyClass<T> { }
interface MyInterface<T extends MyClass> {
void m1(T<Integer> argument);
void m2(T<String> argument);
void m3(T<?> argument);
}
コンパイラの苦情なし。それは可能ですか?MyClass
タイプセーフを壊さずに、すべてのメソッドが同じ(サブ)クラスを受け取ることを確認したいと思います。ドメインでは、異なるサブクラス ogMyClass
は意味がありません。次のように、ジェネリック型変数を 3 つリストする必要がありますか。
class MyClass<T> { }
interface MyInterface<T1 extends MyClass<Integer>,
T2 extends MyClass<String>, T3 extends MyClass<?>> {
void m1(T1 argument);
void m2(T2 argument);
void m3(T3 argument);
}
これは読むのがひどいように感じますし、私の意図を私が望んでいたほどうまく表現していません. この質問は、まだ私を混乱させているジェネリック定義内のジェネリック生型に関する私の他の質問に関連しています。多分誰かが助けることができます!ありがとうございました。