次のJavaメソッドがあるとします
static <V> KK<V> foo(Class<? extends V> c) {
return null;
}
ここで、KK は次のジェネリック クラスです。
class KK<T> {
}
次にコンパイルします。
KK<String> x = foo(String.class);
しかし、これはしません:
KK<Collection<String>> x = foo(Collection.class);
「互換性のないタイプ: 必須:KK<Collection<String>>
見つかった:KK<Collection>
foo を次のように定義すると:
static <V> KK<V> foo(Class<? super V> c) {
return null;
}
前の呼び出しはコンパイルされますが、次のコードもコンパイルされます。
KK<Collection<String>> x = foo(Object.class);
私はそうしないことを望みます。
その理由はClass<V>
、生の型しかとれないからです。私の質問は、これを回避する方法はありますClass<C>
か? これは可能ですか?C
V