Java 泛型
1. 泛型
(1) 泛型:定义类、接口、方法时,同事声明了一个或多个类型变量(如<E>),称为泛型类、泛型接口、泛型方法、它们统称为泛型。可以在编译阶段约束要操作的数据类型
public static void main(String[] args) {//没加泛型 可以放任何类型的数据ArrayList list = new ArrayList();list.add("卡莎");list.add(123);list.add('c');for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}//加泛型 只能放String类型ArrayList<String> list1 = new ArrayList<>();//从JDK1.7开始,后面的泛型<>可以不声明list1.add("卡莎");list1.add("艾卡西亚");//list1.add(123);for (int i = 0; i < list1.size(); i++) {String str = list1.get(i);System.out.println(str);}
}
(2) 作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力,这样可以避免强制类型转换及其可能出现的异常。
(3) 泛型的本质就是把具体的数据类型作为参数传递给类型变量
2. 泛型类
(1) 格式:修饰符 class 类名<类型变量, 类型变量,.....>{ ..........}
类型变量建议使用大写的英文字母,常用的有E、T、K、V等
//泛型类
public class MyArray<E> {Object[] array = new Object[10];private int size = 0;//记录当前位置public boolean add(E e) {array[size++] = e;return true;}public E get(int index) {return (E)array[index];}
}//多个泛型 类
public class MyArray2<E,D> {public void put(E e, D d) {}
}//动物类
public class Animal {}//狗继承动物类
public class Dog extends Animal{}//继承泛型类
public class MyArray3<E extends Animal> {}//测试public static void main(String[] args) {//泛型类//单个泛型限定StringMyArray<String> array = new MyArray();array.add("卡莎");array.add("艾卡西亚");String a = array.get(0);//卡莎System.out.println(a);//多个泛型限定 String,StringMyArray2<String,String> array2 = new MyArray2<>();array2.put("卡莎","艾卡西亚");array2.put("泰坦","勾");//泛型限定必须为Animal的继承者 Dog继承AnimalMyArray3<Dog> array3 = new MyArray3<>();}
3. 泛型接口
(1) 格式:修饰符 interface 接口名<类型变量,类型变量,......> { ......}
类型变量建议使用大写的英文字母,常用的有E、T、K、V等
泛型接口中泛型也可为<E extends Animal> 此时的泛型必须为Animal的继承者
//泛型接口
public interface Data<E> {void add(E e);ArrayList<E> get(String name);
}//泛型继承接口
public interface Data1<E extends Animal> {void add(E e);ArrayList<E> get(String name);
}//老师实体类
public class Teacher {}//学生实体类
public class Student {}//老师实现Data接口 泛型为老师实体类
public class TeacherData implements Data<Teacher>{@Overridepublic void add(Teacher teacher) {}@Overridepublic ArrayList<Teacher> get(String name) {return null;}
}//学生实现Data接口 泛型为学生实体类
public class StudentData implements Data<Student>{@Overridepublic void add(Student student) {}@Overridepublic ArrayList<Student> get(String name) {return null;}
}
4. 泛型方法、泛型通配符、上下限
(1) 泛型方法格式: 修饰符<类型变量,类型变量,.....> 返回值类型 方法名(形参列表){...}
(2) 通配符
就是 ?,可以在"使用泛型"的时候代表一切类型;E T K V是在定义泛型的时候使用
(3) 泛型的上下限
泛型上限: ? extends Animal : ?能接收的必须是Animal或者他的子类
泛型下限:? super Animal:?能接收的必须是Animal或者他的父类
public class Test3 {public static void main(String[] args) {//泛型方法String s = show("java");Integer i = show(123);char c = show('c');Boolean falg = show(false);Dog dog = show(new Dog());}//泛型方法public static <T> T show(T t){return t;}//泛型继承方法public static <T extends Animal> T show(T t){return t;}// ? 通配符 在使用泛型的时候可以代表一切类型public static void run(ArrayList<?> list){}// ? 通配符继承 在使用泛型的时候可以代表一切类型 Animal(上限)的子类public static void run1(ArrayList<? extends Animal> list){}//super Animal(下限) Animal的父类public static void run3(ArrayList<? super Animal> list){}
}
5. 泛型擦除问题、基本数据类型问题
(1)泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除
(2)泛型不支持基本数据类型,只能支持对象类型(引用数据类型),可以使用基本数据类型的包装类
public static void main(String[] args) {//泛型擦除问题、基本数据类型问题//1.泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除ArrayList<Integer> list = new ArrayList<Integer>();list.add(1);list.add(2);list.add(3);Integer i = list.get(0);System.out.println(i);//2.泛型不支持基本数据类型,只能支持对象类型(引用数据类型)//ArrayList<int> list2 = new ArrayList<int>();}
编译之后的问文件:
基本数据类型的包装类:
基本类型 | 包装类(引用类型,包装类都位于java.Lang包下) |
byte | Byte |
short | Short |
int | Integer 【特殊】 |
long | Long |
float | Float |
double | Double |
char | Character 【特殊】 |
boolean | Boolean |
相关文章:
Java 泛型
1. 泛型 (1) 泛型:定义类、接口、方法时,同事声明了一个或多个类型变量(如<E>),称为泛型类、泛型接口、泛型方法、它们统称为泛型。可以在编译阶段约束要操作的数据类型 public static void main(String[] args) {//没加泛型 可以放任何…...
CentOS7 搭建 MQTT(mosquitto)环境并收发数据
零:说在前面 最近在研究物联网相关内容,需要接收 Modbus 协议的数据。上游数据源提出由对方整合数据后使用 MQTT 协议将数据发送过来,因此需要了解一下什么是 MQTT。 首先,它是一个类似 kafka 的“发布/订阅”模式的消息框架&…...
操作系统课后习题2.2节
操作系统课后习题2.2节 第1题 CPU的效率指的是CPU的执行速度,这个是由CPU的设计和它的硬件来决定的,具体的调度算法是不能提高CPU的效率的; 第3题 互斥性: 指的是进程之间的同步互斥关系,进程是一个动态的过程&#…...
Mac Goland dlv 升级
Mac Goland dlv 升级 问题表现 WARNING: undefined behavior - version of Delve is too old for Go version 1.22.1 (maximum supported version 1.21)查看当前Goland dlv 版本 ☁ ~ /Applications/GoLand.app/Contents/plugins/go-plugin/lib/dlv/mac/dlv version Delve…...
vue使用pdfh5.js插件,显示pdf文件白屏
pdfh5,展示文件白屏,无报错 实现效果图解决方法(降版本)排查问题过程发现问题查找问题根源1、代码写错了?2、预览文件流的问题?3、pdfh5插件更新了,我的依赖包没更新?4、真相大白 彩蛋 实现效果图 解决方法…...
【FFmpeg】FFmpeg 内存结构 ⑥ ( 搭建开发环境 | AVPacket 创建与释放代码分析 | AVPacket 内存使用注意事项 )
文章目录 一、搭建开发环境1、开发环境搭建参考2、项目搭建 二、AVPacket 创建与释放代码分析1、AVPacket 创建与释放代码2、Qt 单步调试方法3、单步调试 - 分析 AVPacket 创建与销毁代码 三、AVPacket 内存使用注意事项1、谨慎使用 av_init_packet 函数2、av_init_packet 函数…...
[Unity Shader] 【游戏开发】【图形渲染】Unity Shader的种类2-顶点/片元着色器与固定函数着色器的选择与应用
Unity 提供了不同种类的 Shader,每种 Shader 有其独特的优势和适用场景。在所有类型的 Shader 中,顶点/片元着色器(Vertex/Fragment Shader)与固定函数着色器(Fixed Function Shader)是两种重要的着色器类型。尽管它们具有不同的编写方式和用途,理解其差异与应用场景,对…...
Unity 动画曲线研究(Dotween插件)
动画的曲线的介绍 动画曲线(Animation Curve)是一种用于描述动画属性值随时间变化的图形工具。 我们可以通过给自己的动画片段设定不同的动画曲线,使动画效果具有不同表现力。 常见的动画曲线设定有: 线性(Linear&…...
适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)
目录 一、前期准备所需环境配置 1.1. 虚拟环境创建 1.2 下载yolov8源码,在pycharm中进行配置 1.2.1 下载源码 1.2.2 在pycharm终端中配置conda 1.3 在pycharm的terminal中激活虚拟环境 1.4 安装requirements.txt中的相关包 1.5 pip安装其他包 1.6 预训练…...
Linux中输入和输出基本过程
1.文件内核级缓冲区 前面在如何理解Linux一切皆文件的特点中提到为了保证在Linux中所有进程访问文件时的方式趋近相 同,在f ile 结构体中存在一个 files_operations 结构体指针,对应的结构体保存所有文件操作的函 数指针(这个结构体也被称为…...
二、FIFO缓存
FIFO缓存 1.FIFO缓存介绍2.FIFO缓存实现3.FIFO缓存总结 1.FIFO缓存介绍 FIFO(First-In-First-Out)缓存 是一种简单的缓存淘汰策略,它基于先进先出的原则来管理数据。当缓存达到容量限制并需要淘汰元素时,最先进入缓存的元素会被移…...
Linux_挂载nas
1、安装挂载nas必要的服务 yum -y install nfs-utils rpcbind 2、挂载nas sudo mount -t nfs -o vers3,nolock,prototcp,noresvport <NAS-IP>:/path/to/shared /yourNasPath mount 命令详解: -t :文件系统类型 ,这里指定的挂载类…...
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
**提要:**近段时间我们收到多个康复机构用户,咨询AI运动识别插件是否可以应用于肢力运动受限患者的康复锻炼中来,插件是可以应用到AI康复锻炼中的,今天小编就为您介绍一下AI运动识别插件在康腹锻炼中的应用场景。 一、康复机构的应…...
现代密码学总结(上篇)
现代密码学总结 (v.1.0.0版本)之后会更新内容 基本说明: ∙ \bullet ∙如果 A A A是随机算法, y ← A ( x ) y\leftarrow A(x) y←A(x)表示输入为 x x x ,通过均匀选择 的随机带运行 A A A,并且将输出赋给 y y y。 ∙ \bullet …...
按照字幕拆解视频实战
1. 基本实现思路 字幕文件处理: 提取字幕内容和时间戳(如 SRT 文件格式)。解析字幕中的开始时间和结束时间。 视频切割: 使用字幕的时间戳,剪辑对应时间段的视频。每段字幕对应一个子视频。 输出子视频: …...
2.11.静态链表
一.静态链表的基本概念: 1.上图说明:索引为0处是头结点,头结点不存储数据,但存储下一个结点的数组下标,本例中头结点里存储的下一个结点的数组下标为2,即索引为2的结点为头结点后的第一个结点,以…...
分页查询在数据库中的好处
分页查询在数据库中的好处主要体现在以下几个方面: 提高性能: 减少数据传输:分页查询只返回请求的页面数据,而不是整个数据集,这减少了网络传输的数据量,降低了网络延迟和带宽消耗。减少内存使用࿱…...
电子应用设计方案-54:智能AI人工智能机器人系统方案设计
智能 AI 人工智能机器人系统方案设计 一、引言 随着人工智能技术的快速发展,智能 AI 机器人在各个领域的应用越来越广泛。本方案旨在设计一个功能强大、智能高效、交互友好的人工智能机器人系统,以满足不同场景下的用户需求。 二、系统概述 1. 系统目标…...
μC/OS-Ⅱ源码学习(6)---事件标志组
快速回顾 μC/OS-Ⅱ中的多任务 μC/OS-Ⅱ源码学习(1)---多任务系统的实现 μC/OS-Ⅱ源码学习(2)---多任务系统的实现(下) μC/OS-Ⅱ源码学习(3)---事件模型 μC/OS-Ⅱ源码学习(4)---信号量 μC/OS-Ⅱ源码学习(5)---消息队列 本文进一步解析事件模型中,事件标志…...
ASP.NET|日常开发中读写TXT文本详解
ASP.NET|日常开发中读写TXT文本详解 前言一、读取 TXT 文本1.1 使用StreamReader类 二、写入 TXT 文本2.1 使用StreamWriter类 三、文件编码问题3.1 常见编码格式 四、错误处理和性能考虑4.1 错误处理4.2 性能考虑 结束语优质源码分享 ASP.NET|日常开发中…...
《C 语言向量运算:点亮人工智能几何计算之路》
在人工智能蓬勃发展的时代,数学运算作为其坚实的基石发挥着不可替代的作用。而向量的点积与叉积运算,更是在人工智能的几何计算领域有着独特且关键的地位。今天,就让我们一同深入探讨如何在 C 语言中实现向量的点积、叉积运算,并领…...
HarmonyOS 获取进程相关的信息process 常用的几个方法
获取进程相关的信息,提供进程管理的相关功能。 process 1. EventListener 2. isIsolatedProcess 3. is64Bit 4. getStartRealtime 5. getPastCpuTime 导入模块 import { process } from kit.ArkTS; 属性 名称类型可读可写说明uidnumber是否进程的用户标识。…...
Linux 权限管理实践:精确控制用户对 systemctl 和 journalctl 命令的使用
前言 在 Linux 系统管理中,精确控制用户对特定命令的访问权限是一项关键的安全实践。使用 systemctl 和 journalctl 命令时,不当的权限设置可能会导致不必要的风险。本篇博客将详细讨论如何通过 sudoers 文件和 Polkit 策略为不同用户配置 systemctl 和…...
图像处理之滤波
中值滤波、均值滤波、高斯滤波和双边滤波是常见的图像处理技术,主要用于去噪和图像平滑。低通滤波和高通滤波用于处理图像中的频率成分。它们的主要区别在于它们所允许通过的频率范围。滤波、卷积、去噪、模糊、提取特征是一个意思。 卷积就是两个矩阵的乘法&#…...
html基础-认识html
1.什么是html html是浏览器可以识别的的标记语言,我们在浏览器浏览的网页就是一个个的html文档 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>认识html</title> </head> <body><h1…...
金智塔科技联合浙大人工智能研究所发布全新“智信”可信行业数据空间,共促数字金融创新发展!
由中国计算机学会(CCF)主办,CCF数字金融分会、同济大学、上海立信会计金融学院联合承办,金智塔科技作为金牌合作单位的数字金融领域年度巅峰盛会——首届CCF中国数字金融大会于2024年12月7日在上海成功举办。中国工程院院士蒋昌俊任大会主席,…...
基于单片机的语音识别自动避障小车(论文+源码)
1.系统设计 此次基于单片机的语音识别自动避障小车,以STC89C52单片机作为系统的主控制器,利用超声波模块来实现小车与障碍物距离的测量并通过LCD液晶显示,当距离低于阈值时会通过WT588语音模块进行报警提示,并且小车会后退来躲避…...
使用layui的table提示Could not parse as expression(踩坑记录)
踩坑记录 报错图如下 原因: 原来代码是下图这样 上下俩中括号都是连在一起的,可能导致解析问题 改成如下图这样 重新启动项目,运行正常!...
EF Code 多对多表关系建设和Linq 知识点
自引用组织结构树,比如部门、组织 除了根节点,其他节点都有一个父节点,也包含多个子节点,那么在定义表结构时,既要申明父表的关系,也要申明子表的关系 EF Code 多对多 builder.ToTable("T_Student&…...
Maven 的下载
目录 1、Maven 官方地址2、下载3、解压4、配置本地仓库 1、Maven 官方地址 https://maven.apache.org/ 2、下载 3、解压 将下载的压缩包解压到任意位置 4、配置本地仓库 在 Maven 的安装目录下新建文件夹,用来当作 Maven 的本地仓库 进入 conf 目录下ÿ…...
VPN模式
拓扑结构 实验图: 路由器router 配置 DHCP配置 需要右键激活 路由器项配置网关 dns项配置ip DNS服务配置 正向区域 选择不允许动态更新 反向区域 创建主机 正向 验证是否创建成功 反向查找区域 输入网段 使用默认名称---不允许动态更新 KALI机的验证 web服务…...
LeetCode 热题 100-两数之和(简单)
1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。…...
【C语言】拆解C语言的编译过程
前言 学习C语言的过程中,涉及到各种各样的关键词,在我们点击编译的时候,都会做什么呢?让我们来拆解一下 C语言的编译过程 C语言的编译过程包括预处理、编译、汇编和链接四个主要步骤。每个步骤都有其特定的任务和输出文件类型&am…...
RabbitMQ中的Work Queues模式
在现代分布式系统中,消息队列(Message Queue)是实现异步通信和解耦系统的关键组件之一。RabbitMQ 是一个广泛使用的开源消息代理软件,支持多种消息传递模式。其中,Work Queues(工作队列)模式是一…...
OpenCV圆形标定板检测算法findGrid原理详解
OpenCV的findGrid函数检测圆形标定板的流程如下: class CirclesGridClusterFinder {CirclesGridClusterFinder(const CirclesGridClusterFinder&); public:CirclesGridClusterFinder...
快速理解类的加载过程
当程序主动使用某个类时,如果该类还未加载到内存中,则系统会通过如下三个步骤来对该类进行初始化: 1.加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个…...
monorepo代码管理框架
1. 新建 vue3-component 文件夹 2. 运行pnpm init 3. pnpm i vue typescript 4. 新建.npmrc shamefully-hoisttrue link-workspace-packagestrue 5. ts文件配置 pnpm tsc --init 默认.bin路径下的tsc 6. 新建pnpm-workspace.yaml packages:- packages/** # all packages- p…...
LabVIEW实现蓝牙通信
目录 1、蓝牙通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系…...
R环境配置 以及Debug方法 (VSCode, conda, 远程R)
生物信息学中的R环境配置 以及Debug方法 开始设置1、建议使用VSCode conda 远程R2、 VSCode配置安装插件安装好插件后,远程设置链接成功后,设置项目 3、 linux conda 和 远程R配置4、VScode 远程访问R环境下面配置远程R 5、开始Debug新建个R文件&#…...
ComfyUI 与 Stable Diffusion WebUI 的优缺点比较
ComfyUI与Stable Diffusion WebUI都是AI绘画领域比较知名两款产品,两者存在诸多差异,本篇就带你熟悉二者的优劣,方便自己做出决策。 界面与操作 ComfyUI:界面简洁直观,通过节点和连线的方式构建工作流,用…...
Ubuntu 系统下安装 Nginx
一、Nginx是什么 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少&…...
【Qt】drawText字体大小问题探究
背景 软件的一个功能是: 打开图片在图片上绘制序号,序号的样式是圆圈内包含数字将带有序号的图片打印出来 实现思路也很简单,在屏幕上显示时重写paintEvent函数,利用QPainter完成图片和序号的绘制。打印时只需要将QPainter对应…...
视频汇聚平台:Liveweb视频流媒体平台视频监控系统解决方案
数字化技术在安防领域的广泛应用已经成为公安等重要执法部门的重要趋势,主要得益于无线网络通信技术和计算机技术的快速进步。传统的视频监控系统存在诸多局限,例如只能进行现场监视,报警信息传输简单,无法远距离传输视频信号&…...
Android开发中有关MediaPlayer 播放.mp3文件使用之一
我们在项目中,经常会添加一个简单的语音提示:我们通常会选择MediaPlayer播放SD文件中的.MP3文件或者存到assets下的.mp3文件。正常使用流程如下: 一、播放assets下的.mp3文件 根据assets获取需要播放的文件名 getApplicationContext().getAs…...
Leetcode经典题11--加油站
题目描述 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和…...
23种设计模式之状态模式
目录 1. 简介2. 代码2.1 State (定义抽象状态接口)2.2 StartState (实现具体状态类)2.3 EndState (实现具体状态类)2.4 Context (定义上下文类)2.5 Test (测试类…...
大模型的构建与部署(3)——数据标注
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 数据标注的重要性 1.1 增强数据可解释性 数据标注通过为原始数据添加标签或注释,显著增强了数据的可解释性。在机器学习和深度学习领域,模型的训练依赖于大量带标签的数据。这些标签不仅帮助…...
windows11 专业版 docker desktop 安装指南
家庭中文版需升级专业版,家庭版没有hyper-v。 开始运行optionalfeatures.exe打开windows功能 安装wsl2 步骤 1 - 启用适用于 Linux 的 Windows 子系统步骤 2 - 检查运行 WSL 2 的要求步骤 3 - 启用虚拟机功能步骤 4 - 下载 Linux 内核更新包 步骤 1 - 启用适用于 L…...
mixed strategy
混合策略和期望收益的基本概念 在博弈论中,混合策略是指参与者以一定的概率选择不同的纯策略。期望收益则是在考虑这些概率的情况下,参与者所能获得的平均收益。 以“石头 - 剪刀 - 布”游戏为例 游戏规则回顾 石头胜剪刀,剪刀胜布࿰…...
登上Nature和CVPR!小波变换+UNet上大分!
最近UNet又出现了不少新成果,结合小波变换屡登Nature子刊和CVPR24!比如三路径U-Net模型,利用Haar小波变换大幅提高系统整体性能;再比如利用小波变换的特性来改进U-Net架构的MLWNet网络,性能猛超SOTA! 原因…...