java数据结构安全机制---generic(泛型)

1. 泛型是什么?

定义: 泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时再为参数指明这些类型。

如定义一个类,用<>声明泛型类型,这样的一个类就是泛型类。
在这里插入图片描述

在上述定义中我们没有指定任何的类型,真正的类型在实例化的时候才进行指定,如:
List list = new ArrayList<>();
我给它指定了一个Integer类型。

泛型的本质是参数化类型,也就是说操作的数据类型被指定为一个参数(E 类似于形参,传递的是类型)

2. 为什么要用泛型?

现在有一个集合,在没有泛型时传递的数据都是作为Object类进行存储的,如果在其中即存储 int 数据类型,又存储 String、char 等多种数据类型,这样在编译中不会出现错误,但是在实际调用中,就会产生ClassCastException,即类型转换异常错误。
在这里插入图片描述
在这里插入图片描述
使用泛型的主要目的是加强类型安全减少类转换的次数

3. 怎么用泛型?

泛型类

泛型类的定义:
在这里插入图片描述
在这里插入图片描述

泛型类对象的实例化:
泛型类在对象实例化的时,才指定数据类型。也就是说,泛型的本质是参数化类型,将类型作为形参进行传递
类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>();
在Java1.7以后,后面的<>中的具体的数据类型可以省略不写,即:

类名<具体的数据类型> 对象名 = new 类名<>();`


注意事项:

  • 泛型类,如果没有指定具体的数据类型,此时操作类型是Object
  • 泛型的类型参数只能是类类型(如Integer、Character等),不能是基本数据类型(如int、char等
  • 泛型类型在逻辑上可以看成是多个不同的类型(在逻辑上是不同数据类型的类),但实际上都是相同类型(都是指定的泛型类,这一点通过重载可以看出来)在这里插入图片描述

泛型类的继承

在这里插入图片描述

泛型接口

在这里插入图片描述
泛型接口的实现:

  • 实现类不是泛型类,接口要明确数据类型;
    在这里插入图片描述
  • 实现类也是泛型类,实现类和接口的泛型类型(T/E/…)要一致,但是可以进行泛型扩充。
    在这里插入图片描述
    在这里插入图片描述

泛型方法

在这里插入图片描述
定义一个泛型方法:
在这里插入图片描述


泛型与可变参数:
可变参数: 当调用方法时,方法的参数个数或类型未知时,称其为可变参数列表。
在这里插入图片描述


注意:

  • 带泛型的方法是不支持static的,但是泛型方法才能支持static;
    在这里插入图片描述
    在这里插入图片描述

  • 泛型方法能使方法独立于类而产生变化。

类型通配符

定义: 类型通配符用 ?代替具体的类型实参,表示可以传递任何类型,因此类型通配符是类型实参,而不是类型形参。
在这里插入图片描述


类型通配符的上限:
类型通配符的上限限制了传入的参数类型只能是该上限或者该上限的子类。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类型通配符的下限:
类型通配符的下限限制了传入的参数类型只能是该下限或者该下限的父类。
在这里插入图片描述


泛型擦除

泛型擦除: 泛型信息只存在于代码编译阶段,在进入JVM之前,与泛型相关的信息会被擦除掉,我们称之为泛型(类型)擦除。

泛型与反射

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cloudeeeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值