集合(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<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的子类,就会报错
    }
}
上一篇:Mysql udf插件自定义实现


下一篇:JZ-041-和为 S 的连续正数序列