Java 泛型中的<? super T>和<? extends T>

 

super 要求 ? 必须是 T 的超类或者自身

extends 要求 ? 必须是T的子类或者自身

    /**
     *  <? super T>
     *  super 要求 ? 必须是 T 的超类或者自身
     * Super
     */
    @Test
    public void testSuper() {
        //ArrayList泛型为String,符合<? super String>的要求,String和String本身是相同的类型
        List<? super String> ts = new ArrayList<String>();//正确

        //ArrayList的泛型是Object,Object是所有类的父类,符合<? super T>的要求
        List<? super String> objects = new ArrayList<Object>();//正确


        //ArrayList的泛型是String,String和Integer没啥关系,不符合要求
        //List<? super Integer> strings = new ArrayList<String>();//错误

        //ArrayList的泛型是String,String是Object的子类,不符合要求
        //List<? super Object> strings = new ArrayList<String>();//错误
        

    }

 

    /**
     * <? extends T>
     *     extends 要求 ? 必须是T的子类或者自身
     */
    public void testExtends(){
        //ArrayList的泛型是String,String是Object的子类,符合<? extends T>的要求
        List<? extends Object> strings = new ArrayList<String>(); //ArrayList的泛型是Object,Object是String的父类,不符合<? extends T>的要求
        //List<? extends String> objects = new ArrayList<Object>(); //错误

    }

 

posted @ 2015-03-22 16:30  脱氧  阅读(278)  评论(0编辑  收藏  举报