当前位置: 代码迷 >> J2SE >> 关于泛型不明白的地方,该如何处理
  详细解决方案

关于泛型不明白的地方,该如何处理

热度:220   发布时间:2016-04-24 01:33:25.0
关于泛型不明白的地方
Java code
abstract class A<T>{    public T obj;        public A(T obj){        this.obj = obj;    }        protected abstract T getObj();        protected abstract void setObj(T obj);}class B extends A{        public B(ArrayList<String> list){        super(list);    }    @Override    protected ArrayList<String> getObj() {        return null;    }    @Override    protected void setObj(ArrayList<String> obj) {    }}


上面的getObj()返回值类型可以为ArrayList<String> 这是协变返回类型,没问题。
但setObj(ArrayList<String> obj) 就不行了,无法重写父类的setObj(T obj)。
还有如果我在子类中访问父类的obj变量,是Object类型,并不是子类中构造参数的类型。
我知道直接访问变量不是个好习惯,可是泛型在这里的作用还有么,和直接用Object做为类型没有任何差别啊。

------解决方案--------------------
abstract class A<T>{
public T obj;

public A(T obj){
this.obj = obj;
}

protected abstract T getObj();

protected abstract void setObj(T obj);
}

class B extends A<ArrayList<String>{

public B(ArrayList<String> list){
super(list);
}

@Override
protected ArrayList<String> getObj() {
return null;
}

@Override
protected void setObj(ArrayList<String> obj) {
}
}
  相关解决方案