泛型的通配符

当使用泛型或者泛型接口,传递的数据中,泛型的类型不确定,可以通过通配符<?>表示。一旦程序当中使用泛型的通配符后,只能使用Object类中的共性的方法,集合中元素自身方法无法使用。
通配符的基本使用
泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用?,?代表未知的通配符。
此时只能接收数据,不能往集合中存储数据。
代码实例

public static void main(String[] args){
	//可以存储整数的集合
	Collection<Integer> list01 = new ArrayList<Integer>();
	//此时list01可以存储整数的数据
	//展示list01集合当中的数据
	getElement(list01);
	//可以存储String字符串集合
	Collection<String> list02 = new ArrayList<String>();
	//此时list02可以存储字符串的数据
	//getElement(list02);//如果方法的接受的行参类型的集合的泛型是Object,那么这么写是错误的  Collection<Object>    x    不可以的
	//此时如果换成泛型通配符?就可以接收
	getElement(list02);//可以
}
/*public static void getElement(Collection<Object> coll){
	
}*/
public static void getElement(Collection<?> coll){
	//只能接收Integer类型的数据
	//此时?可以代表任意类型
}

备注:泛型不存在继承关系 Collection list = new ArrayList();这是一种错误的写法。
通配符的高级使用------受限泛型
之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以,但是java的泛型当中还可以指定一个的泛型的上限和下限
泛型的上限

  • 格式:类型名称<? extends 类型>对象名称
  • 意义:只能接受该类型及其子类
    泛型的下限
  • 格式:类型名称<? super 类名>对象名
  • 意义:只能接收该类类型及其父类类型
    比如说:已知的顶级父类的Object,String类,Number类,Integer,其中Number类是Integer的父类
    示例代码
/**
 * 泛型的上限限定: ? extends E 代表使用的泛型只能是E类型或者是E类型的子类
 * 泛型的下线限定   ? super   E 代表使用的泛型只能是E类型或者E类型的父类类型
 */
 /**
  *		类与类之间的继承关系
  *		Integer extends Number extends Object
  */
  
  public static void main(String[] args){
   		Collection<Integer> list01 = new ArrayList<>();
        Collection<String> list02 = new ArrayList<>();
        Collection<Number> list03 = new ArrayList<>();
        Collection<Object> list04 = new ArrayList<>();
        //调用方法getElement1();可以接收Number的子类
        getElement1(list01);
        //getElement1(list02);//不可以接收与number无关的类
        getElement1(list03);
        //getElement1(list04);//不可以接收number的父类类型
	
		//getElement2(list01);//不可以接收Number的子类类型Integer
		//getElement2(list02);//不可以接收和Number无关的类型
		getElement2(list03);//可以接收自己的本身类型
		getElement2(list04);//可以接受number的父类类型
		}
 //定义使用泛型的上限 只能接受Number数字类及其子类
    public static void getElement1(Collection<? extends Number> coll){}
    //定义使用泛型的下限,只能接收Number数字类型及其父类类型
    public static void getElement2(Collection<? super Number> coll){}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值