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 的列表。

4

2 回答 2

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;
}   
于 2013-04-23T03:01:03.103 回答
0

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

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

于 2013-04-23T03:03:32.183 回答