【java】泛型

文章目录

  • 1. 什么是泛型?
    • 1.1 背景
    • 1.2 泛型的概念
    • 1.3 泛型的好处
  • 2. 泛型类、接口...
    • 2.1 泛型类
    • 2.2 从泛型类派生子类
      • 2.2.1 子类也是泛型类,子类和父类的泛型类型要一致
      • 2.2.2 子类不是泛型类,父类要明确泛型的数据类型
    • 2.3 泛型接口
    • 2.4 泛型方法
    • 2.5 类型通配符
      • 2.5.2 类型通配符的上限
      • 2.5.3 类型通配符的下限
  • 3. 类型擦除

【后端&网络&大数据&数据库目录贴】
参考视频

1. 什么是泛型?

1.1 背景

JAVA推出泛型以前,程序员可以构建一个元素类型为Object的集合,该集合能够存储任意的数据类型对象,而在使用该集合的过程中,需要程序员明确知道存储每个元素的数据类型,否则很容易引发ClassCastException异常。

1.2 泛型的概念

Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许我们在编译时检测到非法的类型数据结构。
泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数

1.3 泛型的好处

  1. 类型安全
  2. 消除了强制类型的转换

2. 泛型类、接口…

2.1 泛型类

泛型类的定义语法

class 类名称 <泛型标识,泛型标识,…> {private 泛型标识 变量名; .....
}

常用的泛型标识:T、E、K、V

使用语法

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

Java1.7以后,后面的<>中的具体的数据类型可以省略不写(菱形语法)

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

泛型类注意事项

  1. 泛型类,如果没有指定具体的数据类型,此时,操作类型是Object
  2. 泛型的类型参数只能是类类型,不能是基本数据类型
  3. 泛型类型在逻辑上可以看成是多个不同的类型,但实际上都是相同类型

2.2 从泛型类派生子类

2.2.1 子类也是泛型类,子类和父类的泛型类型要一致

class ChildGeneric<T> extends Generic<T>

2.2.2 子类不是泛型类,父类要明确泛型的数据类型

class ChildGeneric extends Generic<String>

2.3 泛型接口

泛型接口的定义语法

interface 接口名称 <泛型标识,泛型标识,…> {泛型标识 方法名(); .....
}

泛型接口的使用
实现类不是泛型类,接口要明确数据类型
实现类也是泛型类,实现类和接口的泛型类型要一致

2.4 泛型方法

泛型类,是在实例化类的时候指明泛型的具体类型。
泛型方法,是在调用方法的时候指明泛型的具体类型。

语法

  1. public与返回值中间<T>非常重要,可以理解为声明此方法为泛型方法
  2. 只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法
    3. <T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T
  3. 与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。
  4. 泛型方法的泛型标志独立于泛型类,(泛型类使用T,泛型方法也可以使用T,不冲突)(泛型方法能使方法独立于类而产生变化)
  5. 如果static方法要使用泛型能力,就必须使其成为泛型方法.(成员方法使用类的泛型不可以)
修饰符 <TE, ...> 返回值类型 方法名(形参列表) {方法体...
}

可变参数泛型方法

public <E> void print(E... e){for (E e1 : e) {System.out.println(e);}}

2.5 类型通配符

类型通配符一般是使用"?"代替具体的类型实参
所以,类型通配符是类型实参,而不是类型形参。(经过查询资料,并不是实参的说法)
语法
类/接口<?>

2.5.2 类型通配符的上限

语法
类/接口<? extends 实参类型>
要求该泛型的类型,只能是实参类型,或实参类型的子类类型(不能够填充任何类型数据)

2.5.3 类型通配符的下限

语法
类/接口<? super 实参类型>
要求该泛型的类型,只能是实参类型,或实参类型的父类类型(可以填充任何类型数据)
注意:

 //问题1:不能重载,本质依然是同一类型(泛型是同一类型)public  void showBox(Box<Number> box) {Number first = box.getFirst();System.out.println(first);}public  void showBox(Box<Integer> box) {Number first = box.getFirst();System.out.println(first);}//问题2:这里不能通过多态理解,多态理解不能接收Integerpublic  void showBox(Box<Number> box) {Number first = box.getFirst();System.out.println(first);}

3. 类型擦除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AMBA Bus ACE 总线 8 -- ICache maintenance】

请阅读【AMBA Bus ACE 总线与Cache 专栏 】 欢迎学习:【嵌入式开发学习必备专栏】 文章目录 ACE ICache maintenanceACE ICache maintenance 图 1-1 当一个OS run 多个cpu的时候,根据调度算法的不同,OS 可以根据调度算法的不同分别 run 在某个具体的CPU上,因此,它们会有…

分布式模式让业务更高效、更安全、更稳定

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#x1f525;&#xff1a;探索设计模式的魅力&#xff1a;分布式模…

centos7下安装配置nginx

1、下载nginx安装包 wget http://nginx.org/download/nginx-1.8.0.tar.gz 2、安装nginx所需依赖 yum -y install pcre pcre-devel yum -y install zlib zlib-devel yum -y install openssl openssl-devel 3、进入到nginx安装包目录下&#xff0c;解压tar.gz包 cd /home/soft t…

pikachu靶场-全套学习

文章目录 配置pikachu靶场浏览器访问过程burpsuite配置代理hackbar安装使用kali安装中国蚁剑暴力破解cookie简化场景解释各部分含义如何工作 基于表单的暴力破解验证码绕过(On server)验证码绕过(on client)token防爆破? XSS&#xff08;Cross-Site Scripting跨站脚本攻击 &am…

使用AudioCraft(MusicGen)生成音乐

AudioCraft 是一个 PyTorch 库,用于音频生成的深度学习研究。AudioCraft 包含 AudioGen 和 MusicGen 两个最先进的人工智能生成模型的推理和训练代码,用于生成高质量的音频。 MusicGen 是一种简单可控的音乐生成模型,它使用Meta 20K 小时的授权音乐来进行训练,能够生成与文…

【栈】Leetcode 比较含退格的字符串

题目讲解 844. 比较含退格的字符串 算法讲解 使用栈模拟&#xff0c;但遇到#字符就让栈顶元素出栈&#xff0c;但是在写的过程中有两点需要注意&#xff1a;当#出现在第一个位置&#xff0c;需要特殊处理一下&#xff1b;当栈为空的时候&#xff0c;还出现#字符需要特殊处理…

【Web】2023浙江大学生省赛初赛 secObj 题解

目录 step 0 step 1 step 2 step 3 题目本身是不难&#xff0c;简单复健一下 step 0 pom依赖就是spring 反序列化入口在./admin/user/readObj 输入流做了黑名单的过滤&#xff0c;TemplatesImpl不能直接打 可以jackson打SignedObject二次反序列化绕过 具体原理看下面这…

全新时代的降临——比亚迪,助力未来出行

近日&#xff0c;世界舞台中央聚焦&#xff0c;比亚迪登上欧洲顶级赛事赞助席位&#xff0c;让全球见证中国新能源汽车传奇崛起&#xff01;作为新能源领袖品牌&#xff0c;比亚迪现已累计销售突破730万辆&#xff0c;全球每售出五辆新能源汽车&#xff0c;便有一辆来自比亚迪。…

支付漏洞防护绕过的一种方式

首先注册一个账户并进行登陆,点击一个商品点击进去 这里为了方便查看数据包,我这边商品的数量选择3,点击立即购买并抓包 观察数据包,发现有个num传参,正是我选择的数量3,尝试修改为负数-3,这里需要修改两个包 点击提交后发现报错了,显示已经付了或者金额不能为0 也就是说数量…

【SRC实战】利用APP前端加密构造数据包

挖个洞先 https://mp.weixin.qq.com/s/ZnaRn222xJU0MQxWoRaiJg “ 以下漏洞均为实验靶场&#xff0c;如有雷同&#xff0c;纯属巧合” 01 — 漏洞证明 “ 参数加密的情况&#xff0c;不会逆向怎么办&#xff1f;” 1、新用户首次设置密码时抓包&#xff0c;此处设置为0000…

快充插线板怎么选?我的办公搭子是它!

最近我入手了一款倍思65W氮化镓快充插线板,不得不说真的是我的办公好搭子。在这里跟大家分享一下使用体验,希望能给正在挑选快充插线板的你一些参考。 首先,这款插线板的外观真的很讨喜。纯白色的长方体造型,简约而不失时尚感,放在办公桌上非常百搭。而且,它的体积小巧,长度比我…

QT7_视频知识点笔记_2_对话框,布局,按钮,控件(查看帮助文档找功能函数)

第二天&#xff1a; 对话框&#xff0c;布局&#xff0c;按钮 QMainWindow&#xff1a;菜单下拉框添加之后可通过ui->actionXXX&#xff08;自定义的选项名&#xff09;访问&#xff0c;用信号triggered发出信号&#xff0c;槽函数可以使用lambda表达式进行 //菜单栏&am…

【LLM 论文】UPRISE:使用 prompt retriever 检索 prompt 来让 LLM 实现 zero-shot 解决 task

论文&#xff1a;UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation ⭐⭐⭐⭐ EMNLP 2023, Microsoft Code&#xff1a;https://github.com/microsoft/LMOps 一、论文速读 这篇论文提出了 UPRISE&#xff0c;其思路是&#xff1a;训练一个 prompt retri…

WEB基础---反射

什么是反射 相对官方解释 反射的概念是由Smith在1982年首次提出的&#xff0c;主要是指程序可以访问、检测和修改它本身状态或行为的一种能力; 在运行时期,动态地去获取类中的信息(类的信息,方法信息,构造器信息,字段等信息); 在运行的时候获取到的类信息 封装一个字节码对象…

代码随想录算法训练营第六十三天|84.柱状图中最大的矩形

代码随想录算法训练营第六十三天|84.柱状图中最大的矩形 84.柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&…

RN使用js让输入框取消和获取焦点(及键盘的监听)

1.自动获取焦点 <TextInputstyle{{width: 90,paddingLeft: 20,}}autoFocus{true} // 自动获取焦点onChangeText{text > setText(text)}value{text} />2.取消焦点 import React, { useRef } from react; import {TextInput,Button} from react-native; export defaul…

十二届蓝桥杯Python组1月中/高级试题 第四题

十二届蓝桥杯Python组1月中/高级试题 第四题 第四题&#xff08;难度系数 4&#xff0c;30 个计分点&#xff09; 编程实现&#xff1a; 输入一个正整数n&#xff0c;如果n为偶数&#xff0c;则计算1/21/41/6…1/n的结果&#xff0c;如果n为奇数时&#xff0c;则计 算1/11/31/5…

真正的AI 设备:M4 加持iPad Pro

M4来了 北京时间 5/7 晚上&#xff0c;Apple正式发布了其M4 芯片&#xff0c;其对本地化的神经网络加速是一次越级的提升&#xff0c;第一次落地选在iPad上进行部署&#xff0c;从行业的角度是一个明智的选择&#xff0c;相比Mac Pro&#xff0c; iPad 的创作属性更加纯正&…

【YOLO 系列】基于YOLO V8的金属表面缺陷检测检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

前言&#xff1a; 金属表面缺陷的及时检测对于保障产品质量和生产安全至关重要。然而&#xff0c;传统的人工检测方法往往效率低下、耗时长&#xff0c;并且容易受主观因素影响。为了解决这一问题&#xff0c;我们提出了基于深度学习技术的金属表面缺陷检测系统。 本项目采用…

Mybatis中`<include>`标签与`refid`的高效复用法详解

前言 在Mybatis的SQL映射配置中&#xff0c;<include>标签是一种强大的特性&#xff0c;它允许开发者将重复使用的SQL片段抽取出来&#xff0c;以提高代码的可维护性和可读性。通过使用refid属性引用已定义的SQL片段&#xff0c;我们可以轻松地在多个查询中重用相同的SQ…