集合使用泛型通配符时,对象不能调用add方法
class Animal { } class Dog extends Animal { } class Cat extends Animal { } class CollectionDemo { public static void main(String[] args) { //Collection<Object> c1 = new ArrayList<Object>(); //Collection<Object> c2 = new ArrayList<Animal>(); //Collection<?> c2 = new ArrayList<Animal>(); /*c2.add(new Animal()); add (capture<?>) in Collection cannot be applied to (jdk5.generic.Animal)*/ //不能添加元素,不然可能引发错误 /* * 上限通配泛型 * 可以添加T类型对象或者T子类类型对象 * * */ /*Collection<?> c1 = new ArrayList<Animal>();; c1.add(new Animal()); c1.add(new Dog()); //在泛型通配符中,不能给集合对象c1添加元素,因为如果添加成功,可能出现添加元素的类型与c1中元素的实际类型不匹配的问题 Collection<? extends Animal> c2 = new ArrayList<Dog>();; c2.add(new Animal()); c2.add(new Dog()); //在下限泛型通配符中,不能给集合对象c2添加元素,因为如果添加成功,可能出现添加元素的类型与c1中元素的实际类型不匹配的问题,比如我添加Cat,也是Animal的子类,但却不是Dog类 Collection<? super Animal> c3 = new ArrayList<Animal>();; c3.add(new Animal()); c3.add(new Dog()); c3.add(new Object()); //在下限泛型通配符中,可以给集合对象c3添加元素,但只能添加Animal的子类或者Animal本身。*/ } }
上一篇:
IDEA上Java项目控制台中文乱码