您的位置:首页 > 编程语言 > Java开发

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

2015-03-22 16:30 706 查看
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>(); //错误

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: