什么是通配符

顾名思义 所有都能匹配的一种符号

分类

<? extends T> (无穷小,T]

必须是T的子类 或者 其 本身

<? super T> [T,无穷大)

必须是T的父类 或者 其 本身

示例

public class test {
    /**
     * 有限制条件使用通配符
     * extends super  区别
     */
    @Test
    public void test(){
        List<? extends Person> list1 = null;
        List<? super Person> list2 = null;

        List<Student> list3 = null;
        List<Person> list4 = null;
        List<Object> list5 = null;

        list1 = list3;
        list1 = list4;
        /*
        * list1 = list5;
        * Incompatible types.
            Required:
            List
            <? extends com.generci.day02.custom.Person>
            Found:
            List
            <java.lang.Object>
        *
        * ? extends Person必须是Person的子类及其本身
        * 相当于 <= Person
        * */


        /**
         * ? super Person
         * 相当于 >= Person
         */
//        list2 = list3;
        list2 = list4;
        list2 = list5;
    }
}

小结

使用类似<T extends Number>定义泛型类时表示:

泛型类型限定为Number以及Number子类

使用extends通配符表示可以读 不能写

使用super通配符表示只能写 不能读。

使用类似<T super Number>定义泛型类时表示:

泛型类型限定为Number以及Number父类

即使再小的帆也能远航