集合(9):泛型高级(通配符)
(1)泛型通配符<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
(2)<? extends E>
向下限定,E及其子类
(3)<? super E>
向上限定,E及其父类
//定义一个父类
public class Animal {
}
//定义一个子类继承父类
class Dog extends Animal {
}
//定义一个子类继承父类
class Cat extends Animal {
}
public class GenericDemo2 {
public static void main(String[] args) {
//前面我们学到,当泛型里面的类型只用一个,并且明确数据类型的时候,前后必须要写一致
ArrayList<Animal> list1 = new ArrayList<Animal>();
ArrayList<Dog> list2 = new ArrayList<Dog>();
ArrayList<Object> list3 = new ArrayList<Object>();
//泛型通配符<?>
//任意类型,如果没有明确,那么就是Object以及任意的Java类了
//左边使用泛型通配符<?>,表示占个位置,但不知道具体类型,右边可以是任意类型
ArrayList<?> objects1 = new ArrayList<Animal>();
ArrayList<?> objects2 = new ArrayList<Dog>();
ArrayList<?> objects3 = new ArrayList<Object>();
//<? extends E> 向下限定,E及其子类(extends表示继承)
//左边使用<? extends E> ,右边只能是E类或者E的子类
ArrayList<? extends Animal> list4 = new ArrayList<Animal>();
ArrayList<? extends Animal> list5 = new ArrayList<Dog>();
ArrayList<? extends Animal> list6 = new ArrayList<Cat>();
//ArrayList<? extends Animal> list7 = new ArrayList<Object>();
//右边若使用E的父类,就会报错
//<? super E> 向上限定,E及其父类
//左边使用<? super E>,右边只能是E类或者E的父类
ArrayList<? super Animal> list7 = new ArrayList<Animal>();
ArrayList<? super Animal> list8 = new ArrayList<Object>();
//ArrayList<? super Animal> list9 = new ArrayList<Dog>();
//右边若使用E的子类,就会报错
}
}