从头认识java-13.13 无界通配符

这一章节我们来讨论一下无界通配符。

1.怎样使用无界通配符?

无界通配符是直接使用<?>

例子:

package com.ray.ch13;

import java.util.ArrayList;
import java.util.List;

public class Test {

	@SuppressWarnings("unused")
	private static List<?> list2;

	public static void test2(List<?> list) {
		list2 = list;
	}

	@SuppressWarnings("rawtypes")
	public static void main(String[] args) {
		test2(new ArrayList());// rawtypes
		test2(new ArrayList<String>());
	}

}


 

2.使用无界通配符需要注意的地方?

例子:

package com.ray.ch13;

import java.util.ArrayList;
import java.util.List;

public class Test {

	@SuppressWarnings({ "rawtypes", "unused" })
	private static List list1;

	@SuppressWarnings("unused")
	private static List<?> list2;

	@SuppressWarnings("unused")
	private static List<? extends Object> list3;

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static void test1(List list) {// rawtypes
		list1 = list;
		list2 = list;
		list3 = list;// unchecked
	}

	public static void test2(List<?> list) {
		list1 = list;
		list2 = list;
		list3 = list;
	}

	public static void test3(List<? extends Object> list) {
		list1 = list;
		list2 = list;
		list3 = list;
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void main(String[] args) {
		test1(new ArrayList());// rawtypes
		test2(new ArrayList());// rawtypes
		test3(new ArrayList());// unchecked/rawtypes
		test1(new ArrayList<String>());
		test2(new ArrayList<String>());
		test3(new ArrayList<String>());// unchecked
	}

}


我们仔细观察上面的代码,主要看警告,从而得出下面的结论:

(1)List<?>,使用通配符的意义?

就是告诉编译器,我这里需要使用泛型,但是一时我还没有决定类型参数是什么,暂时是全配。

(2)List与List<?>是否有区别?

有。

List,由于类型擦除的关系,List跟List<Object>是等价的,因此List表示的是类型参数是Object的List。

List<?>,表示我这里的类型参数其实是特定的,但是,只是一时没有确定下来。

(3)List<?>与List<? extends Object>是否有区别?

有。

List<?>可以add任何类型的对象,List<? extends Object>只能够add“null”对象。

要是List<? extends Object>换成List<? super Object>,那么他就可以add任何类型的对象。

 

总结:这一章节主要讲述了无界通配符是怎样使用的,需要注意什么。当然,由于笔者水平有限,更深层次的问题暂时还没有发现,有待后面的补充。

 

这一章节就到这里,谢谢。

-----------------------------------

目录

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值