集合(9):泛型高级(通配符)


集合(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 list1 = new ArrayList();
        ArrayList list2 = new ArrayList();
        ArrayList list3 = new ArrayList();
        
        //泛型通配符<?>
        //任意类型,如果没有明确,那么就是Object以及任意的Java类了
        //左边使用泛型通配符<?>,表示占个位置,但不知道具体类型,右边可以是任意类型
        ArrayList<?> objects1 = new ArrayList();
        ArrayList<?> objects2 = new ArrayList();
        ArrayList<?> objects3 = new ArrayList();
        
        
        //<? extends E> 向下限定,E及其子类(extends表示继承)
        //左边使用<? extends E> ,右边只能是E类或者E的子类
        ArrayList<? extends Animal> list4 = new ArrayList();
        ArrayList<? extends Animal> list5 = new ArrayList();
        ArrayList<? extends Animal> list6 = new ArrayList();
	//ArrayList<? extends Animal> list7 = new ArrayList();
        //右边若使用E的父类,就会报错
        
         //<? super E> 向上限定,E及其父类
        //左边使用<? super E>,右边只能是E类或者E的父类
        ArrayList<? super Animal> list7 = new ArrayList();
        ArrayList<? super Animal> list8 = new ArrayList();
	//ArrayList<? super Animal> list9 = new ArrayList();
        //右边若使用E的子类,就会报错
    }
}