IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> java数据结构安全机制---generic(泛型) -> 正文阅读

[数据结构与算法]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之前,与泛型相关的信息会被擦除掉,我们称之为泛型(类型)擦除。

泛型与反射

在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:39:43  更:2022-03-03 16:41:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:39:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码