我有一个ListCreator<T>类和一个构造该类实例的静态方法collectFrom()collectFrom()具有参数List l,我想参数化返回的ListCreator实例,其类型与指定的List相同。

理想情况下,我想要这样的东西:

public static ListCreator<T> collectFrom(List<T> l) {
    return new ListCreator<T>(l);
}

但这是不可能的,所以我坚持这样做:
public class ListCreator<T> {

    List<T> l;

    public ListCreator(List<T> l) {
        this.l = l;
    }

    public static ListCreator collectFrom(List l) {
        return new ListCreator(l);
    }
}

有更好的解决方案吗?

最佳答案

通过在其定义中引入类型参数来泛化您的方法:

public static <T> ListCreator<T> collectFrom(List<T> l) {
    return new ListCreator<T>(l);
}

实际上,class ListCreator<T> {中声明的type参数对该方法没有意义,因为它是static(请参阅Static method in a generic class?)。

10-08 00:28