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 :(得分: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参数构造函数(你应该永远不要这样做,或者至少不要你非常确定你知道发生了什么 - 在这种情况下,你不太可能想要这样做。)