2021-11-16 16:20

泛型--协变-逆变

码自答

JavaEE

(777)

(0)

收藏

1 泛型-协变

//协变
List<? extends Animal> list = new ArrayList<Dog>();
Animal animal = list.get(0);//只能取数据
list.add(new Animal());//错误
list.add(new Dog());//错误

  ?表示Animal类的某一个子类,不确定是哪个子类,所以add方法失败,只能取数据

  取出的数据的数据类型是Animal或者Animal的父类


2 泛型-逆变

//逆变
List<? super Dog> list = new ArrayList<Animal>();
list.add(new Dog());
Object o = list.get(0);
Dog d = (Dog)o;

  ?表示Dog类 的某个父类,可以添加数据


3 泛型-数据类型擦除

//类型擦除
public void print(List<Integer> args)
{	
}
public void print(List<String> args)
{	
}

不能构成重载,不能区分参数List中间的数据类型


4 泛型-类型不变

//不变
List<Animal> list = new ArrayList<Dog>();//错误

虽然Animal是Dog的父类,使用要求数据类型不变




0条评论

点击登录参与评论