Java学习之泛型的使用

为什么使用泛型

泛型的好处是在编译的时候检查类型的安全性,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。

泛型的作用:

  1. 安全性
  2. 消除转换
  3. 提升性能
  4. 重用性

1.保证了类型的安全性

在没有泛型之前。从集合读取到的每一个对象都必须进行类型的强制转换,如果不小心插入了错误的类型对象,在运行的时候转换处理就会出错。

比如:没有泛型的情况下使用集合:

在没有定义泛型的时候,编译时会通过的。

但是在使用泛型的时候编译是不会通过的

有泛型之后,定义好的add(52)就会编译不通过。

相当于告诉编译器每个集合接收的对象类型是什么,编译器在编译的时候就会检查类型,然后告知是否出现了错误类型的对象,是的程序更加安全,增加了程序的健壮性。

2.消除强制转换

泛型的一个附带好处就是,消除了源代码中的许多强制转换,这使得代码更加可读,并且减少了出错的机会。

比如:没有在没有泛型的情况下,代码需要强制转换

但是在使用泛型之后,代码就不用强制转换了

3.避免了不必要的装箱、拆箱操作,提高了程序的性能

在非泛型编程中,将简单类型作为Object传递时会引起Boxing(装箱)和UNboxing(拆箱)操作,这两个过程都是具有很大的开销的。引入泛型后,就不必进行Boxing和UNboxing操作了,所以运行效率相对较高,特别在对集合进行操作非常频繁的系统中,这个特点带来的性能提升更加明显了。

泛型变量固定了类型,使用的时候就已经知道是值类型还是引用类型,避免了不必要的装箱和拆箱操作。

4.提高了代码的重用率

泛型类

泛型接口

泛型方法

类型通配符

泛型中包含三种通配符分别是:无边界的通配符、固定上界的通配符、固定能够下界 的   通配符。

1.无边界通配符表示任意的类型都可以接受 就是<?> ,比如:ArrayList<?>

无边界通配符的主要作用是让泛型能够接受未知类型的数据。

2.固定下边界类型表示参数类型必须是A类或者是A的子类,比如:ArrayList<? extends E>

使用固定下边界的通配符的泛型,就能够接受指定类型及其子类的类型数据。要声明使用该类的通配符,采用<? extends E>的形式,这里的E就是该泛型的上边界。

注意:这里虽然用的extends关键字,却不仅限于继承了父类E的子类,也可以代以代指显现了接口E的类。

  1. 固定下边界的通配符表示参数类型必须是A或者A的超类型,比如:<? super E>

使用固定下边界的通配符的泛型,就能够接受指定类及其父类类型的数据。要声明使用该类的通配符,采用<? super E>的形式,这里的E就是该泛型的下边界。

注意:你可以认为一个泛型指定上边界或下边界,但不能同时指定上下边界。

使用方法:

泛型中KTVE的含义

E:elements(在集合中使用,因为集合中存放的是元素)

T:Type(java类)

K: Key(键)

V:Value(值)

N:Number(数值类型)

?:表示不确定的java类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值