泛型(代码示例待补充)

基本概念

泛型的本质是个参数化的类型,将参数的类型作为一个参数,在运行时决定(?)。
在没有泛型之前,容器返回的类型都是Object类型,因此根据实际情况,降返回值强转为期望的类型。引入泛型之后,容器中的存储类型在声明时就可以确定,因此对容器的操作不需要进行类型转换。
使用泛型一方面可以增加代码的可读性,降低程序出错的可能性,也提高了程序的运行效率。

ArrayList list = new ArrayList();
list.add('a');
Integer object = (Integer)list.get(0); //抛出强制类型转换异常
List<String> list = new ArrayList<String>();
list.add(1); //编译不通过,提早发现问题
list.add("1");

泛型的功能:

  1. 避免代码中的类型强转
  2. 限定类型。在编译时提供额外的类型检查,避免错误的值被存入容器

泛型分类

  • 泛型接口
  • 泛型类
  • 泛型方法

有界泛型

  1. ?表示通配符类型,用于表达任意类型,但并不是object
  2. extends 定义上界
T extends UpperBound

T必须是UpperBound,或者其子类。

  1. super定义泛型的下界
T super LowerBound

T必须为LowerBound或者其父类。

复杂泛型

类型擦除

在编码阶段采用泛型加上的类型参数,会被编译器在编译时去掉,这个过程被称为类型擦除。因此,泛型主要用于编译阶段。编译后生成的Java字节码文件不包含泛型中的类型信息。由泛型附加的类型信息对JVM来说是不可见的。
通过反射,无法获取泛型的确定类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值