当前位置: 首页 > news >正文

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笔记-泛型的使用

参考&#xff1a; Java 泛型&#xff0c;你了解类型擦除吗&#xff1f; 泛型的使用 1、泛型的定义 可以广泛使用的类型&#xff0c;一种较为准确的说法就是为了参数化类型&#xff0c;或者说可以将类型当作参数传递给一个类或者是方法。 2、泛型的使用 2.1泛型类 public c…...

特斯拉无人驾驶解读

来源于Tesla AI Day Tesla无人驾驶算法的核心任务就是如何理解我们所看到的一切呢?也就是说,不使用高端的设备,比如激光雷达,仅仅使用摄像头就能够将任务做得很好。Tesla使用环绕型的8个摄像头获得输入。 第一步是特征提取模块Backbone,无论什么任务都离不开特征…...

生物素-琥珀酰亚胺酯Biotin-NHS;CAS号:35013-72-0;可对溶液中的抗体,蛋白质和任何其他含伯胺的大分子进行简单有效的生物素标记。

结构式&#xff1a; ​ 生物素-琥珀酰亚胺酯Biotin NHS CAS号&#xff1a;35013-72-0 英文名称&#xff1a;Biotin-NHS 中文名称&#xff1a;D-生物素 N-羟基琥珀酰亚胺酯&#xff1b;生物素&#xff0d;琥珀酰亚胺酯 CAS号&#xff1a;35013-72-0 密度&#xff1a;1.50.1 …...

Maven_第五章 核心概念

目录第五章 其他核心概念1、生命周期①作用②三个生命周期③特点2、插件和目标①插件②目标3、仓库第五章 其他核心概念 1、生命周期 ①作用 为了让构建过程自动化完成&#xff0c;Maven 设定了三个生命周期&#xff0c;生命周期中的每一个环节对应构建过程中的一个操作。 …...

【深度学习】人脸识别工程化落地

文章目录前言1、facenet2、使用2.1.其它blog2.2 实践总结前言 老早以前就希望能写一篇关于人脸识别的工程化落地的案例&#xff0c;一年前做疲劳驾驶时使用的dlib插件&#xff0c;它封装好了&#xff0c;人脸检测、对齐、相似度计算三个部分,就是插件比较难装,但同时也少了很多…...

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垃圾回收分代收集如何识别垃圾引用计数法可达性分析法引用关系四种类型&#xff1a; 强、软、弱、虚强引用软引用 SoftReference弱引用 WeakReferenceWeakHashMap软引用与虚引用的使用场景虚引用与引用队列引用队列虚引用 PhantomReference垃圾回收算法引用计数复制 Cop…...

C++中的容器

1.1 线性容器1&#xff09;std::array看到这个容器的时候肯定会出现这样的问题&#xff1a;为什么要引入 std::array 而不是直接使用 std::vector&#xff1f;已经有了传统数组&#xff0c;为什么要用 std::array?先回答第一个问题&#xff0c;与 std::vector 不同&#xff0c…...

2023备战金三银四,Python自动化软件测试面试宝典合集(五)

接上篇八、抓包与网络协议8.1 抓包工具怎么用 我原来的公司对于抓包这块&#xff0c;在 App 的测试用得比较多。我们会使用 fiddler 抓取数据检查结果&#xff0c;定位问题&#xff0c;测试安全&#xff0c;制造弱网环境;如&#xff1a;抓取数据通过查看请求数据&#xff0c;请…...

SpringDI自动装配BeanSpring注解配置和Java配置类

依赖注入 上篇博客已经提到了DI注入方式的构造器注入&#xff0c;下面采用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月份参加字节跳动和华为的面试的&#xff0c;虽然我只拿下了小米的offer&#xff0c;但是我自己也满足了&#xff0c;想把经验分享出来&#xff0c;进而帮助更多跟我一样想进大厂的同行朋友们&#xff0c;希望大家可以拿到理想offer。 自我介绍 我是16年从南京工业大学毕…...

磐云PY-B8 网页注入

文章目录1.使用渗透机场景windows7中火狐浏览器访问服务器场景中的get.php&#xff0c;根据页面回显获取Flag并提交&#xff1b;2.使用渗透机场景windows7中火狐浏览器访问服务器场景中的post.php&#xff0c;根据页面回显获取Flag并提交&#xff1b;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函数的重写五、阅读源码基本属性参考文章&#xff1a;史上最详细的 JDK 1.8 HashMap 源码解析参考文章&#xff1a;Hash详解参考文章&#xff1a;hashCode源码分析参考…...

华为OD机试 - 数组合并(Python),真题含思路

数组合并 题目 现在有多组整数数组, 需要将他们合并成一个新的数组。 合并规则, 从每个数组里按顺序取出固定长度的内容合并到新的数组中, 取完的内容会删除掉, 如果该行不足固定长度或者已经为空, 则直接取出剩余部分的内容放到新的数组中, 继续下一行。 如样例 1, 获得长度…...

Vue2创建移动端项目

一、Vscode Vscode 下载安装以及常用的插件 1、Vscode 下载 下载地址&#xff1a;Vscode 中文语言插件 搜索 chinese 主题 Atom 主题 文件图标主题 搜索 icon 源代码管理插件GitLens 搜索 GitLens Live Server _本地服务器 搜索 Live Server Prettier - Code formatt…...

PorterDuffXfermode与圆角图片

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 圆角图片 在项目开发中&#xff0c;我们常用到这样的功能&#xff1a;显示圆角图片。 这个是咋做的呢&#xff1f;我们来瞅瞅其中一种实现方式 /*** param bitmap 原图* p…...

如何准备大学生电子设计竞赛

大学生电子设计竞赛难度中上&#xff0c;一般有好几个类型题目可以选择&#xff0c;参赛者可以根据自己团队的能力、优势去选择合适自己的题目&#xff0c;灵活自主空间较大。参赛的同学们可以在暑假好好学习相关内容&#xff0c;把往年的题目拿来练练手。这个比赛含金量还是有…...

【Java容器(jdk17)】ArrayList深入源码,就是这么简单

ArrayList深入源码一、ArrayList源码解析1. MIXIN 的混入2. 属性说明3. 构造方法4. 其他方法&#xff08;核心&#xff09;iterator 和 listIterator 方法add方法remove 方法sort方法其他二、ArrayList 为什么是线程不安全的&#xff1f;体现哪些方面呢&#xff1f;三、ArrayLi…...

【Java 面试合集】简述下Java的三个特性 以及项目中的应用

简述下Java的特征 以及项目中的应用 1. 概述 上述截图中就是Java的三大特性&#xff0c;以及特性的实现方案。接下来就每个点展开来说说 2. 封装 满足&#xff1a;隐藏实现细节&#xff0c;公开使用方法 的都可以理解为是封装 而实现封装的有利手段就是权限修饰符了。可以根据…...

git基本概念图示【学习】

基本概念工作区&#xff08;Working Directory&#xff09;就是你在电脑里能看到的目录&#xff0c;比如名字为 gafish.github.com 的文件夹就是一个工作区本地版本库&#xff08;Local Repository&#xff09;工作区有一个隐藏目录 .git&#xff0c;这个不算工作区&#xff0c…...

微前端qiankun架构 (基于vue2实现)使用教程

工具使用版本 node --> 16vue/cli --> 5 创建文件 创建文件夹qiankun-test。 使用vue脚手架创建主应用main和子应用dev 主应用 安装 qiankun: yarn add qiankun 或者 npm i qiankun -S 使用qiankun&#xff1a; 在 utils 内创建 微应用文件夹 microApp,在该文件夹…...

记录robosense RS-LIDAR-16使用过程3

一、wireshark抓包保存pcap文件并解析ubuntu18安装wireshark&#xff0c;参考下面csdn教程&#xff0c;官网教程我看的一脸蒙&#xff08;可能英语太差&#xff09;https://blog.csdn.net/weixin_46048542/article/details/121730448?spm1001.2101.3001.6650.2&utm_medium…...

【博学谷学习记录】大数据课程-学习第七周总结

Hadoop配置文件修改 Hadoop安装主要就是配置文件的修改&#xff0c;一般在主节点进行修改&#xff0c;完毕后scp下发给其他各个从节点机器 文件中设置的是Hadoop运行时需要的环境变量。JAVA_HOME是必须设置的&#xff0c;即使我们当前的系统中设置了JAVA_HOME&#xff0c;它也…...

154、【动态规划】leetcode ——494. 目标和:回溯法+动态规划(C++版本)

题目描述 原题链接&#xff1a;494. 目标和 解题思路 &#xff08;1&#xff09;回溯法 本题的特点是nums中每个元素只能使用一次&#xff0c;分别试探加上nums[index]和减去nums[index]&#xff0c;然后递归的遍历下一个元素index 1。 class Solution { public:int res …...

MySQL-窗口函数

窗口函数概念常用窗口函数聚合窗口函数专用窗口函数语法OVER子句window_specwindow_name (命名窗口)partition_clause 分区order_clause 排序frame_clause 范围 &#xff08;指定窗口大小&#xff09;使用限制练习准备概念 窗口函数对一组查询执行类似于聚合的操作。然而&#…...

【C++设计模式】学习笔记(1):面向对象设计原则

目录 简介面向对象设计原则(1)依赖倒置原则(DIP)(2)开放封闭原则(OCP)(3)单一职责原则(SRP)(4)Liskov替换原则(LSP)(5)接口隔离原则(ISP)(6)优先使用对象组合,而不是类继承(7)封装变化点(8)针对接口编程,而不是针对实现编程结语简介 Hello! 非常感谢您阅读海…...

[测开篇]设计测试用例的方法如何正确描述Bug

​ 文章目录为什么测试人员要写测试用例&#xff1f;怎样设计测试用例&#xff1f;&#xff08;总的方面&#xff09;1.基于需求设计测试用例&#xff08;总的方面&#xff09; 2.页面&#xff08;总的方面&#xff09; 3.非功能性测试&#xff08;具体方面&#xff09; 4.1 等…...

设计模式学习笔记--单例、建造者、适配器、装饰、外观、组合

以下内容根据以下网址及相关视频整理&#xff1a;Android设计模式之单例模式_谬谬清不给我取名字的博客-CSDN博客_android 单例模式 Android设计模式--单例模式的六种实现和单例模式讲解Volatile与Synchronized相关的并发_龙腾腾的博客-CSDN博客_android 单例 volatile java …...

跨境独立站哪个平台好/2021年网络营销考试题及答案

7-27 冒泡法排序 (20 分) 将N个整数按从小到大排序的冒泡排序法是这样工作的&#xff1a;从头到尾比较相邻两个元素&#xff0c;如果前面的元素大于其紧随的后面元素&#xff0c;则交换它们。通过一遍扫描&#xff0c;则最后一个元素必定是最大的元素。然后用同样的方法对前N−…...

网站内容编辑怎么做/网络营销工具和方法

国际厂商IBM、BEA仍然以强大的综合实力占据了中间件行业的领导位置。另外从实践SOA角度而言&#xff0c;SAP、普元、金碟位于强调产品创新的创新者象限&#xff0c;成为中间件行业变革的生力军。最近&#xff0c;易观国际发布了《中国中间件厂商实力矩阵专题报告》&#xff0c;…...

西安关键词seo/搜索引擎seo

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447;转自公众号&#xff1a;HJ说 作者&#xff1a;formulahendry说明对于 955 名单中的公司&#xff0c;基本不属于 996 的公司&#xff0c;相对接近 955/965 的水平&…...

聊天app搭建/关键词排名优化提升培训

展开全部b4造成这个现象的原因是636f70793231313335323631343130323136353331333365633866row默认不指定align-items这个样式, 而该样式不指定默认为stretch(拉伸), 因此当第一列将row撑高后, 第二列也会被拉伸, 这种情况给row指定下align-item可以解决, 使用b4的align-item-st…...

网站建设销售话术开场白/推广网站

163邮箱成立至今&#xff0c;已有近20年的历史&#xff0c;从免费邮箱的普及到全面升级后163vip收费邮箱&#xff0c;均受到了各行业广泛关注&#xff0c;尤为值得一提的TOM旗下163.net邮箱&#xff0c;在过去的2018年凭借2次大型会员活动及不断上新的功能&#xff0c;更是实力…...

青岛外贸网站制作公司/dw网站制作

问题描述&#xff1a; 假设在数据库中存在以下两张数据表&#xff1a; User表&#xff0c;存放用户的基本信息&#xff0c;基本结构如下所示&#xff1a; 类型说明ID_Userint自动增长字段&#xff0c;用作该表的主键UserNamevarchar UserDepart表&#xff0c;存放用户所拥有的部…...