如何启动泛型类型

时间:2013-04-23 02:47:41

标签: java generics

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类型列表。

2 个答案:

答案 0 :(得分: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;
}   

答案 1 :(得分:0)

通常,对于泛型,您将传入在构造通用对象时使用的类型化对象(或者可能是知道如何创建它们的工厂)。

其他任何东西都是一个hack,它需要比编译器更多的类型知识,比如使用“reflection”来创建一个对象,假设它有一个0参数构造函数(你应该永远不要这样做,或者至少不要你非常确定你知道发生了什么 - 在这种情况下,你不太可能想要这样做。)