2015-10-06 3 views
3

У меня есть класс 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); 
    } 
} 

Есть ли лучшее решение?

ответ

6

Genericize ваш метод, вводя параметр типа в своем определении:

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

В самом деле, параметр тип, объявленный в class ListCreator<T> { не имеет никакого значения для этого метода, поскольку он является static (см Static method in a generic class?).

+2

Он имеет значение для конструктора и переменной-члена. –

+0

@JBNizet Да, я имел в виду метод. Спасибо, что указали это. – manouti