Java通用规范

时间:2014-03-08 03:01:49

标签: java generics

无法弄清楚如何在java泛型中表达这一点。我想创建一个创建一些测试数据的方法 - 在这种情况下,传入一个集合类型和一个值类型并返回一个例子 - 例如

generateSampleCollection(HashSet.class, String.class) -> returns a HashSet<String> 

问题在于我无法弄清楚如何用泛型来表达这一点。例如:

public static <T extends Collection<E>, E> T<E> generateSampleCollection(Class<T> t, Class<E> i) {... }

失败并显示错误“类型T不是通用的”。有人知道怎么做吗?似乎它应该可行,但我没有看到它。

1 个答案:

答案 0 :(得分:3)

泛型中无法表达由类型变量表示的类型具有(或多个)类型参数。

所以你不能做你想做的事。你能做的最多就是

public static <T extends Collection<E> /* and the E doesn't change anything */, E> T generateSampleCollection(
        Class<T> t, Class<E> i) throws InstantiationException, IllegalAccessException {
    return null; // actually return an instance of type T
}

并转换返回值。