使用Java </v>中的Class <v>和泛型类型

时间:2013-10-09 14:30:34

标签: java generics

说我有以下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>只能采用原始类型。我的问题是,有没有办法解决这个问题,即我希望foo采用Class<C> CV的原始类型。这可能吗?