栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

Java泛型通配符?的理解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java泛型通配符?的理解

Java泛型中关于?, ?extents A ,? super A 三个的联系与区别。

为什么需要 (泛型通配符?)

Java中可以自动向下转型,比如B extends A。(A是B的父类)

	List list1 = null;
	List list2 = null;

	@Test
	void test1() {
		//不具备父子类关系
		//list2=list1;

		List list3 = null;
		ArrayList list4 = null;
		list3 = list4;

	}
 

小结:

  1. B是 A的子类。但G与G没有关系,不能相互赋值。(重要)
  2. B是A的子类。B是A的子类
泛型参数统一父类List

为了统一处理泛型参数的父子类问题。引入公共父类List.可以接收任意的泛型对象

//可以接收所有类型的实例
	public void iterate(List list) {
		Iterator iterator = list.iterator();
		while (iterator.hasNext()) {
			Object next = iterator.next();
		}
	}

	@Test
	void test2() {
		iterate(list1);
		iterate(list2);
	}
get与set
	@Test
	void test3(){
		list=list1;

		//可以get
		Object o = list.get(0);
		//
		list.add(null);
		//?为不确定类型,运行时通过传入参数确定,编译期还不确定,所以不能添加除了null的任何值
		//list.add("AAA");

	}
带参数限制的?
	@Test
	void test4() {
		List list1 = new ArrayList<>();
		List list2 = new ArrayList<>();
		List list3 = new ArrayList<>();

		List list4 = null;
		List list5 = null;

		//? extends Person 表示 (-?,Person],表示运行时传入确定某一子类与A之间的泛型父类
		//list4=list1;
		list4 = list2;
		list4 = list3;

		//? super Person 表示 [Person,+?) 表示A与运行时传入A的某一父类之前的泛型父类
		list5 = list1;
		list5 = list2;
		//list5=list3;

		//get
		Person person = list4.get(0);
		Object object = list5.get(0);

		//set
		list4.add(null);
		//无法运行时具体类型,所以无法确定区间,所以不能添加(不知道为什么Person也不能,先记住吧)
		//list4.add(new Person());
		//list4.add(new Object());
		//list4.add(new Student());

		//list5至少是Person,不管运行时确定的类是Person的哪个父类。
		// 在存入时,都可以存入Person的子类。因为子类可以安全的下转型
		//list5.add(new Object());
		list5.add(new Person());
		list5.add(new Student());

	}
 

总结:

通配符类型参数列表可接收的范围get类型set类型常用地方
(-∞,+∞)Object除null,不可set参数列表中需要处理任何泛型类型时
?super Person[Person,?)Object可以setPerson及其子类参数列表中只能添加Person的子类。并且方便get(操作问题),此时违反正常逻辑中的父类参数能接受子类对象的约定。
?extends Person(-∞,?]Person除null,不可set返回值中需要限定类型,只能返回Person的子类(父子类问题)
转载请注明:文章转载自 www.wk8.com.cn
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号