Java泛型,泛型边界,泛型擦除

泛型

类型参数化

在不能确定输入类型时使用,更加灵活。泛型接口,泛型方法,泛型类

输入类型一旦确认,之后输入的类型不能更改

List<String> list = new ArrayList<>();
list.add("hello");
list.add(62);//编译报错

一般不以Object作为参数类型。

泛型不能实现方法的重载,可使用通配符,使用后不能添加任何元素

public void method(List<?> list) {
    list.add(null);
	list.add("d");//编译错误,任何类型都不能添加	
}
泛型边界

​ 如果在泛型中使用 extends 和 super 关键字,就可以对泛型的类型进行限制。即:规定泛型的上限下限

//集合里能存放Number类型和它的子类类型(上限)
List<? extends Number> list = new ArrayList();
//集合里能存放Number类型和它的父类类型(下限)
List<? super Number> list2 = new ArrayList();

​ 上限也用在接口,类,方法,变量中

​ 下限只在声明变量时可用

泛型擦除

​ 任何一个使用了泛型之后,在编译的时候擦除了关于泛型的信息。

​ 擦除后变为原始类型Object

List<String> list2 = new ArrayList();
list2.add(new Integer(2));//编译出错,类型不匹配
List list3 = list2;//在编译之后,list2泛型被擦除,List list3 = new ArrayList();
list3.add(new Integer(2));//list3能加入的类型为Object
list3.add("hello");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值