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条评论
点击登录参与评论