Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何启动泛型类型 公共接口myInterface{ 公共列表doWork(); } 公共抽象类基类实现myInterface{ 受保护的T-obj; 受保护名单; 公共基类(){ //如何启动obj? //如何启动列表? } } 公共类myClassA扩展了基类{ 公共列表doWork() }_Java_Generics - Fatal编程技术网

Java 如何启动泛型类型 公共接口myInterface{ 公共列表doWork(); } 公共抽象类基类实现myInterface{ 受保护的T-obj; 受保护名单; 公共基类(){ //如何启动obj? //如何启动列表? } } 公共类myClassA扩展了基类{ 公共列表doWork() }

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

我有这段代码,我想知道如何动态启动obj和类型T的列表

您不必在
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;
}