Java 仿制药问题再次出现。此方法如何正确返回?

Java 仿制药问题再次出现。此方法如何正确返回?,java,generics,Java,Generics,我有一个名为Custom的类,希望能够有一个getAll(class)方法,该方法在将Custom类作为参数传递给Custom类时返回Custom的类型集合 Collection<Custom> c = null; c = getAll(Custom.class); public static <T> Collection<T> getAll(Class<T> type) { Collection<type> t = new

我有一个名为Custom的类,希望能够有一个getAll(class)方法,该方法在将Custom类作为参数传递给Custom类时返回Custom的类型集合

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;
}
集合c=null;
c=getAll(Custom.class);
公共静态集合getAll(类类型){
集合t=新的ArrayList();
返回t;
}
上面是我的尝试,但编译器抱怨我无法通过该类。这样做对吗?之所以使用这些类型,是因为我希望不同的类能够调用getAll(),并将调用类作为集合类型

tl;dr-我想要一个可以接受任何类的通用方法。
谢谢

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

Collection<type> t = new Collection<type>;
对我有用

下面是一个示例,说明了为什么
参数是一个好主意:

Iterator<Integer> it1 = getAll(Integer.class)).iterator(); // Works.
Iterator<Integer> it2 = getAll().iterator(); // Does not work.
Iterator it1=getAll(Integer.class)).Iterator();//作品
迭代器it2=getAll().Iterator();//不起作用。
您可以简单地执行以下操作:

public static <T> Collection<T> getAll() {
    return  new ArrayList<T>();
}
公共静态集合getAll(){
返回新的ArrayList();
}
并使用以下命令调用此方法:

Collection<Custom> col = getAll();
Collection col=getAll();

我打赌根本不需要参数
类型
。它工作正常。

集合是一个接口,因此您无法创建新实例。啊,是的,很抱歉,这是一个输入错误。回答中的第一个错误。例如,我应该将其放入ArrayList中。我是否需要为该方法设置参数才能使其工作?例如,类类型?是的,因为否则编译器无法可靠地推断出
T
是什么。当
Custom
单独涉及泛型时,这将变得更加棘手,因为您不能执行
Iterator.class
。然后您需要强制转换。根据您的编译器,它有时可能会工作,但通常遵循以下规则:所有方法泛型都必须由函数的参数绑定。这可以编译,也可以工作,这是这里发布的最整洁的解决方案。它得到了我的投票。请解释一下它是否应该有课堂辩论。我对其他答案中相互矛盾的观点感到困惑。@StephenD,Baadshah的代码完全按照他提供的代码工作。您不需要为getAll方法提供类对象。我猜编译器能够通过将其返回到预期的
集合
变量类型来推断类型。当您不打算使用它时,是否需要在任何地方传递值或引用。???只是没必要case@StephenD为了澄清,如果编译器不能推断泛型类型,你可以自己指定。例如,给定一个方法
m(集合c)
,调用
m(getAll())
将无法编译,因为类型推断将失败。作为一种解决方法,您可以执行
m(MyClass.getAll())
,其中
MyClass
是声明
getAll()
的类。
Collection<Custom> col = getAll();