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

【Java语法糖】泛型与源码角度分析静态问题

概念

        首先聊聊泛型,泛型是JDK5的新特性。泛型是用来指定不同类型来控制形参具体限制的类型。泛型这种语法机制,只在程序编译阶段起作用,只是给编译器参考的(运行阶段泛型没用)。写了这么多代码应该能知道泛型的优点就是可以使集合中存储的元素类型是统一一致的并且可以做到不需要进行大量的转型。此文章并不主要讲泛型的使用,而是记录源码中泛型的用法,比如<T>这种类型。

public class GenericTest{public static void main(String[] args){//这就是使用泛型的方法 保证此集合只存储String数据类型的元素List<String> list = new ArrayList<String>();//在JDK8后引入了新特性:自动类型推断机制 可以将上面的语句简写为:List<String> list = new ArrayList<>();}
}

泛型表示

        首先应该知道泛型可以被用在什么地方上?答案有:接口方法属性。当然哈,泛型不能用在八种基本数据类型上:byte、short、int、long、float、double、boolena、char。必须用在类名后或者方法返回值之前。泛型的表达式主要有以下几种:

1、<T> 普通符号

2、无边界通配符 <?>

3、上界通配符 <? extends E> E表示父类

4、下界通配符<? super E> 是E的子类

泛型擦除

public class GenericTest {public static void main(String[] args){List<String> l1 = new ArrayList<>();List<Integer> l2 = new ArrayList<>();System.out.println(l1.getClass() == l2.getClass() ? "true" : "false");//true}
}

从上面这个例子可以看出两个集合中存储的类型不一致,但是得到的字节码文件是一样的。这就是因为JVM的泛型擦除机制,在JVM中把泛型给忽略掉了,只保留了原始类型。

静态方法与返回类型

        上文说过:泛型必须用在类名后或者方法返回值之前。所以如果我们编写的类中的静态方法,使其返回的类型为当前类本身并且后面还加了个泛型,那么静态方法后也要加泛型,否则会报错,这是为什么呢?例子如下:

public class Result<T> {private T data;//这样写是会报错的public static Result<T> ok(T data){return Result.ok(data);}//必须在静态方法后也加个泛型public static<T> Result<T> ok(T data){return Result.ok(data);}//如果不想报错就写成非静态的public Result<T> ok(T data){return Result.ok(data);}
}

        上述这个例子就必须研究到JVM的类加载机制:

        静态方法和普通方法的生命周期不一致:静态方法生命周期属于类加载的时候,在Java中泛型只是一个占位符,必须传递具体类型才可以使用,也就是类实例化的时候才传递具体参数类型,由于静态方法的加载在类实例化之前,也就是说在类未实例化的时候,类中的泛型还没有传递真正的类型参数,这时候静态方法就已经加载完成。显然,静态方法不能使用/也就是访问不到泛型类中的泛型,所以需要加<T>声明使用哪种泛型类型。所以说,如果不想报错的话也可以不用静态方法。

        还有一点就是关于泛型擦除。Java的泛型属于伪泛型,也就是说只会在编译期才生效。编译之后会产生泛型擦除。比如T就会被JVM认成Object。

相关文章:

【Java语法糖】泛型与源码角度分析静态问题

概念 首先聊聊泛型&#xff0c;泛型是JDK5的新特性。泛型是用来指定不同类型来控制形参具体限制的类型。泛型这种语法机制&#xff0c;只在程序编译阶段起作用&#xff0c;只是给编译器参考的&#xff08;运行阶段泛型没用&#xff09;。写了这么多代码应该能知道泛型的优点就是…...

App 抓包提示网络异常怎么破?

背景 当你测试App的时候&#xff0c;想要通过Fiddler/Charles等工具抓包看下https请求的数据情况&#xff0c;发现大部分的App都提示网络异常/无数据等等信息。以“贝壳找房”为例&#xff1a; Fiddler中看到的请求是这样的&#xff1a; 你可能开始找证书的问题&#xff1a;是…...

操作系统-文件系统

一、总论 1.1 直观感受 这一章虽然名义上很简单&#xff0c;但是我个人觉得真的很难&#xff0c;其难度是要远超于 lab3 和 lab4 的。对于 lab3 和 lab4&#xff0c;其难度主要集中于复杂的函数调用关系上&#xff0c;如果理清了函数调用关系&#xff0c;会发现难度就很容易弄…...

虚拟机无法访问外网的问题

配置&#xff1a; 1、虚拟机采用NAT模式进行配置 2、虚拟机IP&#xff1a;192.168.109.101&#xff0c;掩码&#xff1a;255.255.255.0&#xff0c;网关&#xff1a;192.168.109.2 3、虚拟机网络编辑器&#xff1a;网关192.168.109.2&#xff0c;网段192.168.109.0&#xff0c;…...

软件测试【常见】62 道面试题,不背完这些你还想去面试?

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 02、您认为做好测试用例设计工作的关键是什么&#xff1f; 03、您在从事性能测试工作时&#xff0c;是否使用过一些测试工具&#xff1f;如果有&#xff0…...

聚观早报 | ChatGPT 停止 Plus 付费;李子柒油管广告收益登顶热搜

今日要闻&#xff1a;ChatGPT 停止 Plus 付费&#xff1b;李子柒油管广告收益登顶热搜&#xff1b;亚马逊游戏部门百名员工被裁&#xff1b;国内一公司推出太空葬&#xff1b;苹果将在印度国金融中心开设零售店ChatGPT 停止 Plus 付费 4 月 5 日消息&#xff0c;ChatGPT 目前已…...

对接多个 Neuron 实例,实现多网关协同分析与设备联动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dxTiQ9Lw-1680846960656)(C:\Users\DELL\Desktop\0407技术号四\0407技术号四图片\对接多个 Neuron 实例&#xff0c;实现多网关协同分析与设备联动 图1.png)] 3 月份&#xff0c;eKuiper 团队主要进行…...

windows下 Jenkins 主从节点通过SSH连接

之前已经介绍了在windows下&#xff0c;Jenkins通过启动agent.jar文件来进行主从节点配置(传送门&#xff1a;Jenkins 主从节点配置教程&#xff08;windows10&#xff09;_jenkins windows节点_町棠棠的博客-CSDN博客https://blog.csdn.net/naturly/article/details/129819780…...

JAVA练习101-任务调度器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-任务调度器 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 4月7日练习…...

华为OD机试-匿名信-2022Q4 A卷-Py/Java/JS

电视剧《分界线》里面有一个片段&#xff0c;男主为了向警察透露案件细节&#xff0c;且不暴露自己&#xff0c;于是将报刊上的字减下来&#xff0c;剪拼成匿名信。 现在又一名举报人&#xff0c;希望借鉴这种手段&#xff0c;使用英文报刊完成举报操作。 但为了增加文章的混淆…...

muduo源码剖析--Inetaddress/Socket/Acceptor

InetAddress类 实际上封装了传入socket地址类&#xff0c;包括ip、端口以及具体的协议簇 // 封装socket地址类型 class InetAddress { public:explicit InetAddress(uint16_t port 0, std::string ip "127.0.0.1");explicit InetAddress(const sockaddr_in &…...

域名过户操作流程及常见问题

模板添加及模板过户操作流程&#xff1a; 一、添加模板操作流程&#xff1a; 1.在业务管理-域名管理-模板管理中找到“添加模板” 2.选择所有者类型&#xff08;个人或是企业/组织&#xff09;&#xff0c;填写新的域名所有者资料&#xff0c;填写无误后点击“确定”。 目前…...

多国拟发ChatGPT禁令 关“野兽”的笼子要来了?

“人工智能想越狱“、”AI产生自我意识”、“AI终将杀死人类”、“硅基生命的进化”.......曾经只在在赛博朋克等科技幻想中出现的剧情&#xff0c;在今年走向现实&#xff0c;生成式自然语言模型正在遭受前所未有的质疑。 聚光灯下最瞩目的那个是ChatGPT&#xff0c;3月底到4…...

深度学习中,Params参数量和FLOPs计算量分别指什么

在深度学习中&#xff0c;参数量和计算量是两个重要的概念。 参数量&#xff1a; 参数量指的是深度神经网络中需要学习的参数数量。在深度学习中&#xff0c;每个神经元都有一个权重&#xff0c;这些权重是需要通过训练来确定的。深度神经网络中的参数量是指所有权重的数量之…...

1分钟快速制作思维导图「ChatGPT+XMind」—— 跟上时代的脚步,这辈子就起飞了 - 第5篇

历史文章&#xff08;文章累计460&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 S…...

生成与获取token

public class JwtUtils {// TOKEN的有效期1小时&#xff08;S&#xff09;private static final int TOKEN_TIME_OUT 1 * 3600;// 加密KEYprivate static final String TOKEN_SECRET "itcast";// 生成Tokenpublic static String getToken(Map params){long current…...

【人工智能】ChatGTP从入门到精通

当谈论自然语言处理和文本生成技术时&#xff0c;Chat GPT 是一个备受瞩目的话题。作为一种基于深度学习的语言模型&#xff0c;Chat GPT 在近几年里已经展现出了惊人的能力&#xff0c;可以生成几乎无法区分与人类写作的文本&#xff0c;并在自然语言处理领域的各种任务中都表…...

电脑桌面图标间距突然变大怎么恢复

1. WindowsR打开 > 输入regedit 按住WindowsR打开运行&#xff0c;输入regedit并点击确定。 2. 双击Control Panel 双击展开HKEY_CURRENT_USER&#xff0c;双击展开Control Panel&#xff0c;双击展开Desktop。 3. 更改间距 点击打开WindowMetrics&#xff0c; 双击打开…...

详解各版本Web服务器限制请求体大小的方法

前言 我们在上传大文件的时候通常会把请求体大小限制设置的很大&#xff0c;但平常没有这种业务需求的时候一般就会做出限制&#xff0c;避免异常请求的进入&#xff0c;我们该怎么去设置这个限制呢&#xff1f; 一般来说&#xff0c;Linux服务器没有直接限制请求参数包大小的…...

二叉树_详解

目录 1. 树型结构 1.1 概念 1.2 概念 1.3 树的表示形式 1.4 树的应用 2. 二叉树 2.1 概念 2.2 两种特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储 2.5 二叉树的基本操作 2.5.1 前置说明 2.5.2 二叉树的遍历 2.5.3 二叉树的基本操作 1. 树型结构 1.1 概念 …...

在Node.js后端服务中集成Taotoken调用多模型AI功能的指南

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Node.js后端服务中集成Taotoken调用多模型AI功能的指南 对于Node.js开发者而言&#xff0c;在后端服务中集成AI能力正变得日益普…...

Windows MSI文件提取终极指南:lessmsi替代方案轻松提取安装包内容

Windows MSI文件提取终极指南&#xff1a;lessmsi替代方案轻松提取安装包内容 【免费下载链接】lessmsi A tool to view and extract the contents of an Windows Installer (.msi) file. 项目地址: https://gitcode.com/gh_mirrors/le/lessmsi 你是否曾经为了从MSI安装…...

Taotoken的Token Plan套餐在实际开发中的节省效果

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken的Token Plan套餐在实际开发中的节省效果 1. 理解Token Plan的计费模式 在开发过程中&#xff0c;大模型API的调用成本是…...

双核Delfino架构解析:如何解决复杂实时控制系统的性能瓶颈

1. 项目概述&#xff1a;从“双核”到“创新架构”的深度解构最近在和一些做工业控制、新能源以及高端医疗器械的朋友交流时&#xff0c;发现一个词被反复提及&#xff0c;那就是“双核Delfino”。乍一听&#xff0c;这像是一个具体的芯片型号&#xff0c;但深入聊下去&#xf…...

初创团队如何利用Taotoken的Token Plan实现AI成本优化

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创团队如何利用Taotoken的Token Plan实现AI成本优化 对于资源有限的初创团队而言&#xff0c;在产品开发中引入大模型能力已成为…...

数据结构第8章查找:单元测试15题全解析(顺序查找+折半查找+分块查找+哈希查找)

第8章 查找 单元测试1. 线性表只有以&#xff08; A &#xff09;方式存储&#xff0c;才能进行折半查找。A. 顺序B. 链接C. 二叉树D. 关键字有序的2. 有序表为{2&#xff0c;4&#xff0c;10&#xff0c;13&#xff0c;33&#xff0c;42&#xff0c;46&#xff0c;64&#x…...

别再手动改文献了!手把手教你定制Mendeley的GB/T 7714-2005引用格式(附常见问题修复)

深度定制Mendeley文献引用格式&#xff1a;GB/T 7714-2005实战指南 科研写作中&#xff0c;文献引用格式的规范性直接影响论文的专业程度。许多研究者在使用Mendeley内置的GB/T 7714-2005格式时&#xff0c;常遇到作者名全大写、et al.显示异常等问题。本文将提供一套完整的解…...

终极指南:如何在macOS上轻松安装KLayout版图设计软件

终极指南&#xff1a;如何在macOS上轻松安装KLayout版图设计软件 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout 想要在macOS上安装专业级的集成电路版图设计工具KLayout吗&#xff1f;&#x1f60a; 作为一款功能…...

终极Ryzen调校指南:用SMUDebugTool解锁AMD平台隐藏性能

终极Ryzen调校指南&#xff1a;用SMUDebugTool解锁AMD平台隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...

Android 11 热点永不关闭的三种实现方案:从源码修改到API调用

Android 11热点持久化方案深度解析&#xff1a;从系统底层到应用层的完整实现 在移动设备开发领域&#xff0c;热点功能的稳定性与持久性一直是开发者关注的重点。Android 11系统默认的热点超时机制&#xff08;10分钟无连接自动关闭&#xff09;虽然考虑了节能因素&#xff0c…...