2013-04-23 22 views
0
public interface myInterface<T> { 

    public List<T> doWork(); 

} 

public abstract class baseClass<T> implements myInterface<T>{ 

    protected T obj; 
    protected List<T> list; 

    public baseClass<T>(){ 
     //how do I initiate obj? 
     //how do I initiate list? 
    } 
} 

public class myClassA extends baseClass<T> { 

public List<T> doWork() 
} 

我有這個代碼,我想知道如何可以動態啓動obj和類型T的列表。如何啓動泛型

+0

的'名單'很容易,但是:'新的ArrayList ()'。 – 2013-04-23 02:49:32

回答

0

您不必在BaseClass初始化任何東西,因爲它是抽象的。但是,你當然可以做到。並且,用大寫的B以及與大寫M的界面命名該類,因爲這是標準。你不需要做的就是把<T>放在構造函數中。這裏有一個可能性:

public BaseClass(T obj, List<T> list){ 
    this.obj = obj; 
    this.list = list; // Or copy it for safety. 
} 

如果你想通過類本身創建的列表,在其聲明中初始化:

protected List<T> list = new ArrayList<>(); // Java 7 
public BaseClass(T obj){ 
    this.obj = obj; 
} 
0

一般來說,仿製藥,你會通過在類型對象在構建通用對象(或者知道如何創建它們的工廠)時使用。

其他任何東西都是需要更多類型知識的編程,比編譯器可以說明的要多,比如使用「反射」創建一個假設它具有0參數構造函數的對象(您絕不應該這樣做,或者至少不要直到你真的確定你知道發生了什麼 - 在這種情況下,你不太可能想這麼做)。