Java 如何启动泛型类型 公共接口myInterface{ 公共列表doWork(); } 公共抽象类基类实现myInterface{ 受保护的T-obj; 受保护名单; 公共基类(){ //如何启动obj? //如何启动列表? } } 公共类myClassA扩展了基类{ 公共列表doWork() }
我有这段代码,我想知道如何动态启动obj和类型T的列表 您不必在Java 如何启动泛型类型 公共接口myInterface{ 公共列表doWork(); } 公共抽象类基类实现myInterface{ 受保护的T-obj; 受保护名单; 公共基类(){ //如何启动obj? //如何启动列表? } } 公共类myClassA扩展了基类{ 公共列表doWork() },java,generics,Java,Generics,我有这段代码,我想知道如何动态启动obj和类型T的列表 您不必在BaseClass中初始化任何内容,因为它是抽象的。但是,你肯定能做到。并且,用大写字母B命名类,用大写字母M命名接口,这是标准。您不需要做的是将放入构造函数中。这里有一种可能性: public interface myInterface<T> { public List<T> doWork(); } public abstract class baseClass<T> implem
BaseClass
中初始化任何内容,因为它是抽象的。但是,你肯定能做到。并且,用大写字母B
命名类,用大写字母M
命名接口,这是标准。您不需要做的是将
放入构造函数中。这里有一种可能性:
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()
}
公共基类(T对象,列表){
this.obj=obj;
this.list=list;//为了安全起见,请复制它。
}
如果希望由类本身创建列表,请在其声明处初始化它:
public BaseClass(T obj, List<T> list){
this.obj = obj;
this.list = list; // Or copy it for safety.
}
protectedlist=new ArrayList();//爪哇7
公共基类(T obj){
this.obj=obj;
}
一般来说,对于泛型,在构造泛型对象时,您将传入要使用的类型化对象(或者可能是知道如何创建它们的工厂)
其他任何东西都是一种黑客行为,它需要比编译器所能告诉的更多的类型知识,比如使用“反射”来创建一个对象,假设它有一个0参数构造函数(你永远不应该这样做,或者至少在你真的知道发生了什么之前不应该这样做——在这种情况下,你不太可能想这样做).列表很简单,但是:新建ArrayList()
。
protected List<T> list = new ArrayList<>(); // Java 7
public BaseClass(T obj){
this.obj = obj;
}