-1

我有一个名为 Custom 的类,并且希望能够有一个方法 getAll(Class) 在将 Custom 类作为参数传递时返回 Custom 的类型 Collection。

Collection<Custom> c = null;
c = getAll(Custom.class);

public static <T> Collection<T> getAll(Class<T> type) {
    Collection<type> t = new ArrayList<type>();
    return t;
}

以上是我的尝试,但编译器抱怨我无法通过类。这是这样做的正确方法吗?类型的原因是因为我希望不同的类能够调用 getAll() 并将调用类作为集合类型。

tl;博士 - 我想要一个可以接受任何课程的通用方法。谢谢!

4

2 回答 2

4

你可以简单地做:

public static <T> Collection<T> getAll() {
    return  new ArrayList<T>();
}

并使用以下方法调用此方法:

Collection<Custom> col = getAll();

我敢打赌根本不需要争论type。它工作正常。

于 2013-06-12T15:48:04.373 回答
3

抱歉,您的代码在多个点上被破坏了。

Collection<type> t = new Collection<type>;

应该是什么type(在编译时 - 泛型是“通过擦除”实现的,所以它们在运行时不可用)?试试Collection<T>吧。

构造函数需要(),但Collection它是一个接口,因此无法实例化...尝试new ArrayList<T>()改为。

IE

public static <T> Collection<T> getAll(Class<T> type) {
    return new ArrayList<T>();
}

为我工作。

下面是一个为什么Class<T>参数是个好主意的例子:

Iterator<Integer> it1 = getAll(Integer.class)).iterator(); // Works.
Iterator<Integer> it2 = getAll().iterator(); // Does not work.
于 2013-06-12T15:38:53.130 回答