1

次の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>か? これは可能ですか?CV

4

1 に答える 1

0
于 2013-10-19T18:11:52.900 に答える