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>(); //错误 }