关于泛型不明白的地方
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) {
}
}