Java笔记-泛型的使用
参考:
Java 泛型,你了解类型擦除吗?
泛型的使用
1、泛型的定义
可以广泛使用的类型,一种较为准确的说法就是为了参数化类型,或者说可以将类型当作参数传递给一个类或者是方法。
2、泛型的使用
2.1泛型类
public class Test<T> {T field1;
}
2.2 泛型接口
public interface Iterable<T> {
}
2.3 泛型方法
public class Test1 {public <T> void testMethod(T t){}
}
3、泛型的通配符、上下限
除了用 表示泛型外,还有 <?>这种形式。? 被称为通配符。
通配符的出现是为了指定泛型中的类型范围。
通配符有 3 种形式。
<?>被称作无限定的通配符。
<? extends T>被称作有上限的通配符。类型必须是T或T的子类
<? super T>被称作有下限的通配符。类型是T或T的父类
4.泛型擦除
泛型信息只存在于代码编译阶段,**在进入 JVM 之前,与泛型相关的信息会被擦除掉,**专业术语叫做类型擦除。
import java.util.ArrayList;
import java.util.List;public class Generics1<T> {public static void main(String[] args) {List<String> l1 = new ArrayList<String>();List<Integer> l2 = new ArrayList<Integer>();System.out.println(l1.getClass() == l2.getClass());System.out.println(l1.getClass());System.out.println(l2.getClass());}
}

打印的结果为 true 是因为 List和 List在 jvm 中的 Class 都是 List.class。这意味着,泛型信息被擦除了
那么<String>和<Integer>这些泛型类型呢?
import java.lang.reflect.Field;public class Erasure<T> {T age;public Erasure(T age){this.age=age;}public static void main(String[] args) {//通过反射查看泛型类运行时的状态信息Erasure<String> erasure=new Erasure<String>("hi");Class eclz=erasure.getClass();System.out.println("类型是:"+eclz.getName());//查看T类型在jvm中的具体类型Field[] fs=eclz.getDeclaredFields();for(Field f:fs){System.out.println("字段名称="+f.getName());System.out.println("字段类型="+f.getType());}}
}
打印结果显示T类型是Object类型

类型擦除后,不一定是Object类型,如果指定了上限如 <T extends String>则类型参数就被替换成类型上限。
import java.lang.reflect.Field;public class Erasure<T extends String> {T age;public Erasure(T age){this.age=age;}public static void main(String[] args) {//通过反射查看泛型类运行时的状态信息Erasure<String> erasure=new Erasure<String>("hi");Class eclz=erasure.getClass();System.out.println("类型是:"+eclz.getName());//查看T类型在jvm中的具体类型Field[] fs=eclz.getDeclaredFields();for(Field f:fs){System.out.println("字段名称="+f.getName());System.out.println("字段类型="+f.getType());}}
}相关文章:
Java笔记-泛型的使用
参考: Java 泛型,你了解类型擦除吗? 泛型的使用 1、泛型的定义 可以广泛使用的类型,一种较为准确的说法就是为了参数化类型,或者说可以将类型当作参数传递给一个类或者是方法。 2、泛型的使用 2.1泛型类 public c…...
特斯拉无人驾驶解读
来源于Tesla AI Day Tesla无人驾驶算法的核心任务就是如何理解我们所看到的一切呢?也就是说,不使用高端的设备,比如激光雷达,仅仅使用摄像头就能够将任务做得很好。Tesla使用环绕型的8个摄像头获得输入。 第一步是特征提取模块Backbone,无论什么任务都离不开特征…...
生物素-琥珀酰亚胺酯Biotin-NHS;CAS号:35013-72-0;可对溶液中的抗体,蛋白质和任何其他含伯胺的大分子进行简单有效的生物素标记。
结构式: 生物素-琥珀酰亚胺酯Biotin NHS CAS号:35013-72-0 英文名称:Biotin-NHS 中文名称:D-生物素 N-羟基琥珀酰亚胺酯;生物素-琥珀酰亚胺酯 CAS号:35013-72-0 密度:1.50.1 …...
Maven_第五章 核心概念
目录第五章 其他核心概念1、生命周期①作用②三个生命周期③特点2、插件和目标①插件②目标3、仓库第五章 其他核心概念 1、生命周期 ①作用 为了让构建过程自动化完成,Maven 设定了三个生命周期,生命周期中的每一个环节对应构建过程中的一个操作。 …...
【深度学习】人脸识别工程化落地
文章目录前言1、facenet2、使用2.1.其它blog2.2 实践总结前言 老早以前就希望能写一篇关于人脸识别的工程化落地的案例,一年前做疲劳驾驶时使用的dlib插件,它封装好了,人脸检测、对齐、相似度计算三个部分,就是插件比较难装,但同时也少了很多…...
AOP面向切面编程思想。
目录 一、AOP工作流程 1、基本概念 2、AOP工作流程 二、AOP核心配置 1、AOP切入点表达式 2、AOP通知类型 三、AOP通知获取数据 1、获取参数 2、获取返回值 3、获取异常 四、AOP事务管理 1、Spring事务简介 2、Spring事务角色 3、事务属性 一、AOP工作流程 1、…...
实验7-变治技术及动态规划初步
目录 1.统计个数 2.数塔dp -A 3.Horspool算法 4.计数排序 5.找零问题1-最少硬币 1.统计个数 【问题描述】有n个数、每个元素取值在1到9之间,试统计每个数的个数 【输入形式】第一行,n的值;第二行...
JVM垃圾回收机制GC理解
目录JVM垃圾回收分代收集如何识别垃圾引用计数法可达性分析法引用关系四种类型: 强、软、弱、虚强引用软引用 SoftReference弱引用 WeakReferenceWeakHashMap软引用与虚引用的使用场景虚引用与引用队列引用队列虚引用 PhantomReference垃圾回收算法引用计数复制 Cop…...
C++中的容器
1.1 线性容器1)std::array看到这个容器的时候肯定会出现这样的问题:为什么要引入 std::array 而不是直接使用 std::vector?已经有了传统数组,为什么要用 std::array?先回答第一个问题,与 std::vector 不同,…...
2023备战金三银四,Python自动化软件测试面试宝典合集(五)
接上篇八、抓包与网络协议8.1 抓包工具怎么用 我原来的公司对于抓包这块,在 App 的测试用得比较多。我们会使用 fiddler 抓取数据检查结果,定位问题,测试安全,制造弱网环境;如:抓取数据通过查看请求数据,请…...
SpringDI自动装配BeanSpring注解配置和Java配置类
依赖注入 上篇博客已经提到了DI注入方式的构造器注入,下面采用set方式进行注入 基于set方法注入 public class User {private String name;private Address address;private String[] books;private List<String> hobbys;private Map<String,String>…...
2月面经:真可惜...拿了小米的offer,字节却惨挂在三面
我是2月份参加字节跳动和华为的面试的,虽然我只拿下了小米的offer,但是我自己也满足了,想把经验分享出来,进而帮助更多跟我一样想进大厂的同行朋友们,希望大家可以拿到理想offer。 自我介绍 我是16年从南京工业大学毕…...
磐云PY-B8 网页注入
文章目录1.使用渗透机场景windows7中火狐浏览器访问服务器场景中的get.php,根据页面回显获取Flag并提交;2.使用渗透机场景windows7中火狐浏览器访问服务器场景中的post.php,根据页面回显获取Flag并提交;3.使用渗透机场景windows7中…...
多传感器融合定位十-基于滤波的融合方法Ⅰ其二
多传感器融合定位十-基于滤波的融合方法Ⅰ其二3. 滤波器基本原理3.1 状态估计模型3.2 贝叶斯滤波3.3 卡尔曼滤波(KF)推导3.4 扩展卡尔曼滤波(EKF)推导3.5 迭代扩展卡尔曼滤波(IEKF)推导4. 基于滤波器的融合4.1 状态方程4.2 观测方程4.3 构建滤波器4.4 Kalman 滤波实际使用流程4…...
Java集合面试题:HashMap源码分析
文章目录一、HashMap源码二、HashMap数据结构模型图三、HashMap中如何确定元素位置四、关于equals与hashCode函数的重写五、阅读源码基本属性参考文章:史上最详细的 JDK 1.8 HashMap 源码解析参考文章:Hash详解参考文章:hashCode源码分析参考…...
华为OD机试 - 数组合并(Python),真题含思路
数组合并 题目 现在有多组整数数组, 需要将他们合并成一个新的数组。 合并规则, 从每个数组里按顺序取出固定长度的内容合并到新的数组中, 取完的内容会删除掉, 如果该行不足固定长度或者已经为空, 则直接取出剩余部分的内容放到新的数组中, 继续下一行。 如样例 1, 获得长度…...
Vue2创建移动端项目
一、Vscode Vscode 下载安装以及常用的插件 1、Vscode 下载 下载地址:Vscode 中文语言插件 搜索 chinese 主题 Atom 主题 文件图标主题 搜索 icon 源代码管理插件GitLens 搜索 GitLens Live Server _本地服务器 搜索 Live Server Prettier - Code formatt…...
PorterDuffXfermode与圆角图片
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 圆角图片 在项目开发中,我们常用到这样的功能:显示圆角图片。 这个是咋做的呢?我们来瞅瞅其中一种实现方式 /*** param bitmap 原图* p…...
如何准备大学生电子设计竞赛
大学生电子设计竞赛难度中上,一般有好几个类型题目可以选择,参赛者可以根据自己团队的能力、优势去选择合适自己的题目,灵活自主空间较大。参赛的同学们可以在暑假好好学习相关内容,把往年的题目拿来练练手。这个比赛含金量还是有…...
【Java容器(jdk17)】ArrayList深入源码,就是这么简单
ArrayList深入源码一、ArrayList源码解析1. MIXIN 的混入2. 属性说明3. 构造方法4. 其他方法(核心)iterator 和 listIterator 方法add方法remove 方法sort方法其他二、ArrayList 为什么是线程不安全的?体现哪些方面呢?三、ArrayLi…...
AI Agent配置文件供应链安全:AgentLint静态分析工具实战指南
1. 项目概述与核心价值最近在折腾AI编程助手,比如Claude Code和Cursor,发现它们的配置文件(.claude/、CLAUDE.md、.cursorrules)功能强大得有点吓人。这些文件不仅能定义代码风格,还能配置“技能”(Skills&…...
Unity性能优化实战:Mesh Baker 纹理合并与UV重映射详解
1. 为什么需要纹理合并与UV重映射 在开发开放世界游戏时,场景中往往会出现大量重复的建筑、植被等模型。每个模型通常都有自己的材质球和贴图,这会导致两个严重问题:首先是Draw Call数量激增,每个材质球都会产生一次Draw Call&…...
cua_desktop_operator_cli_skill:用命令行自动化桌面操作的效率利器
1. 项目概述:一个桌面操作员的命令行技能集最近在开源社区里看到一个挺有意思的项目,叫cua_desktop_operator_cli_skill。光看这个名字,可能有点摸不着头脑,但如果你是一个经常需要和电脑桌面、各种应用程序打交道的“操作员”&am…...
Windows本地AI开发环境搭建:OpenClaw与Ollama集成指南
1. 项目概述:一个为Windows开发者量身打造的本地AI开发环境如果你是一名在Windows 11上工作,同时又对本地运行大语言模型(LLM)和AI助手感兴趣的开发者,那么你很可能已经体验过那种“配置地狱”:WSL2、Docke…...
过零电压比较器基础知识及Multisim电路仿真
目录 2.9 过零电压比较器 2.9.1 过零电压比较器基础知识 1.电路结构与核心定义 2. 工作原理 3. 核心特点与用途 2.9.2 过零电压比较器Multisim电路仿真 2. 仿真逻辑与工作原理 3. 波形解读(右侧瞬态分析结果) 摘要:过零电压比较器是一种阈值电压为0V的单限比较器,利…...
Agnix:为AI智能体打造安全可控的操作系统级执行环境
1. 项目概述:从“智能体”到“操作系统”的范式跃迁最近在开源社区里,一个名为agent-sh/agnix的项目引起了我的注意。乍一看这个名字,agent和agnix的组合,很容易让人联想到这是又一个基于大语言模型的智能体(Agent&…...
DelphiOpenAI:原生集成OpenAI API,赋能Delphi开发者构建智能应用
1. 项目概述:DelphiOpenAI,一个为Delphi开发者打造的AI桥梁如果你是一名Delphi开发者,看着Python、JavaScript社区热火朝天地集成各种AI能力,自己却苦于没有成熟、好用的原生库,只能望“AI”兴叹,那么今天介…...
在Android Termux中部署轻量级Docker环境:原理、部署与实战指南
1. 项目概述与核心价值最近在折腾移动设备上的开发环境,发现一个挺有意思的项目:George-Seven/Termux-Udocker。简单来说,它是在Android平台的Termux终端模拟器里,实现一个轻量级的、用户空间(User-Space)的…...
016、气压计原理与高度测量
飞控算法从入门到精通 016 气压计原理与高度测量 一、一次炸机带来的教训 去年夏天,我在一个四轴飞行器上调试定高悬停。气压计用的是MS5611,数据手册翻烂了,滤波算法也上了,地面站里高度曲线看着挺平滑。结果一上天,飞机像喝醉了酒——先是莫名其妙往下掉半米,然后猛…...
别再只调API了!深入Qt QGraphicsView事件流,彻底搞懂拖拽缩放背后的‘为什么’
深入Qt QGraphicsView事件流:从拖拽缩放的底层机制到高效调试 在Qt的图形视图框架中,QGraphicsView、QGraphicsScene和QGraphicsItem构成了一个强大的交互系统。许多开发者虽然能够通过调用API实现基本功能,但当遇到事件被意外吞噬、坐标计算…...
