2015-10-06 33 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

泛化你的方法通過引入在其定義的類型參數:

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

相關問題