无法弄清楚如何在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不是通用的”。有人知道怎么做吗?似乎它应该可行,但我没有看到它。
答案 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
}
并转换返回值。