您的位置:首页 > 其它

泛型与继承的关系,通配符

2014-12-08 17:22 483 查看
1 若类A是类B的子类,那么List<A>就不是List<B>的子接口

2 通配符:List[A],List[B]...都是List<?>的子类

  extends A:可以存放A及其子类

  super A:可以存放A及其父类

@Test //泛型与继承
public void test4(){
List<?> list = null;
List<Object> list1 = null;
List<Character>list2 = new ArrayList<Character>();
//list1 = list2;  错误
list = list1;
list = list2;
getList(list1);
getList(list2);
List<? extends Number> a1 = null;
List<Integer> a2 = null;
a1 = a2;
List<Object> a3 = null;
List<? super Number> a4 = null;
a4 = a3;
}
public void getList(List<?> list){
}


3 可以读取声明为通配符的集合类的对象,但不允许向声明为通配符的集合类中写入对象,唯一例外的是null。

@Test
public void test5(){
List<String> list1 = new ArrayList<String>();
list1.add("ff");
list1.add("vb");
List<?> list2 = null;
list2 = list1;
//可以读取声明为通配符的集合类的对象
Iterator<?> ite = list2.iterator();
while(ite.hasNext()){
System.out.println(ite.next());  //返回Object类型
}
//但不允许向声明为通配符的集合类中写入对象,唯一例外的是null
//list2.add("sfd"); ---------错的
list2.add(null);

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