JAVA泛型的学习(3)

2023-05-16

JAVA泛型的学习(3)

1.消除泛型

泛型是使用一种成为类型消除的方法实现的。编译器使用泛型类型信息来编译代码,但是随后会消除它。因此泛型信息在运行时是不可用的。

泛型存在于编译时,一旦编译器确认泛型类型是安全使用的,就会将它转换为原始类型。下面是一个具体的例子:

ArrayList<String> list = new ArrayList<>();
list.add("fsd");
String a = list.get(0);

编译器在检查上述代码正确使用后,会将它翻译成如下代码:

ArrayList list = new ArrayList();
list.add("fsd");
String a = (String)(list.get(0));

 要注意的是,不管实际的具体类型是什么,泛型类是被它的所有实例所共享。假如按照以下方式创建list1和list2:

ArrayList<String> list1 = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();

尽管编译时 ArrayList<String>和ArrayList<Integer>是两种类型,但在运行时只有一个ArrayList类会被加载到JVM中,所以表达式list1 instance ArrayList是正确的,而list1 instance ArrayList<String>是错误的,由于运作时ArrayList<String>并没有在JVM中存储为单独一个类,所以运行时使用它是无意义的。

2.使用泛型的一些限制

由于泛型类型在运行时被消除,所以其存在一些限制 

1.不能使用new E(),如E O = new E();是错误的 

2.E[] O = new E[size];是错误的

3.在静态上下文中不允许类的参数是泛型类型(如下)

public class Test<E> {
	public static void m(E p) {		//error
		
	}
	
	public static E P1;	//error
	
	static {
		E p;	//error
	}
}

4.异常类不能是泛型,泛型类不能扩展java.lang.Throwable 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA泛型的学习(3) 的相关文章

  • Java中ArrayList的交集和并集

    有什么方法可以做到这一点吗 我正在寻找 但没有找到 另一个问题 我需要这些方法 以便我可以过滤文件 有些是AND过滤器 有些是OR过滤器 就像集合论中的那样 所以我需要根据所有文件和保存这些文件的联合 相交 ArrayList 进行过滤 我
  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • ReentrantLock源码阅读(1)(JDK1.8)

    ReentrantLock 前言ReentrantLock JDK 1 8 实现了Lock接口Sync类NonfairSync类FairSync类重要属性和方法 总结 前言 最近在使用Java 并发包时遇到一些问题 xff0c 感觉对于其还
  • SpringBoot整合Kafka控制消费启停遇到的问题记录(@KafkaListener注解使用)

    最近在做一个SpringBoot整合Kafka的一个项目 xff0c 需要控制Kafka客户端消费数据的停止与启动 xff0c 遇到一个问题 xff0c 排查下来感觉对自己有一定帮助 xff0c 趁此记录一下 配置KafkaListener
  • 我的第一次实质性开源贡献——Apache IoTDB

    前言 虽然之前也在Github上尝试提过一些PR 但都是一些doc typo等类型的入门实践 真正算得上有一定实质性工作 xff0c 要数最近在Apache IoTDB上提交的一个功能PR 如果大家对开源感兴趣的话 xff0c 可以看我的一
  • 开源相关知识介绍

    以下是自己网上搜集的一些有关开源的一些背景知识进行分享 xff0c 欢迎对开源感兴趣的同学可以阅读 xff0c 跟我一起走进开源 拥抱开源 目录 一 开源项目的演进 二 开源项目的成功案例 Apache Linux Mozilla Ubun
  • python数据结构算法DAY3| 堆排序

    目录 前言 1 什么是堆排序 xff1f 堆的向下调整性质 2 堆排序思路 3 堆排序代码 python中堆排序的内置模块 4 堆排序时间复杂度 5 堆排序解决topk问题 前言 堆排序是基于完全二叉树 xff0c 堆是一种特殊的完全二叉树
  • Apache IoTDB’s UDF源码分析(1)

    目录 前言 命令行注册UDF函数 Create Function xxx as 34 全限定类名 34 语法分析 生成物理计划 执行物理计划进行函数注册 Select带有UDF函数的查询 前言 继上个月开始了Apache IoTDB的源码贡
  • 新手入门贡献Apache IoTDB

    名词解释 Issue 开源社区的一个任务的统称 xff0c 通常会有一个Issue 列表 xff0c 用于表示各种任务 xff0c 比如功能Issue Bug Issue Improvement Issue等 PR Pull Request
  • Apache IoTDB介绍

    什么是时序数据库 时序数据库 为万物互联插上一双翅膀 有态度的HBase Spark BigData 总体介绍 Apache IoTDB 始于清华大学软件学院 xff0c 是一款时序数据库 主要使用场景是在物联网相关行业 xff0c 如 x
  • 以回溯的思想求解0-1背包问题

    以回溯法的思想求解0 1背包问题 目录 介绍 求解 介绍 0 1背包问题 问题描述 给定n种物品和一背包 物品i的重量是wi xff0c 其价值为pi xff0c 背包的容量为C 问应如何选择装入背包的物品 xff0c 使得装入背包中物品的
  • Qt中QMessageBox中的几种常见用法归纳

    Qt中QMessageBox中的几种常见用法归纳 最简单的弹出一个提示框 QMessageBox question this 34 Title 34 34 Content 34 QMessageBox warning this 34 Tit
  • Java Web学习里遇到一些问题

    Java Web学习里遇到一些问题 在使用Java Bean技术时 xff0c 新建一个Bean类时 xff0c 直接放到src里 xff0c 在Intellij IDEA里会解析不了 xff0c 要在src里建个包将其放到包里 xff0c
  • python里类声明里一个比较坑的错误

    python里类声明里一个比较坑的错误 正确的 import pygame from pygame sprite import Sprite class Alien Sprite 34 34 34 初始化外星人并设置其起始位置 34 34
  • MySQL存储时间出现不一致的问题

    用Java在获取了系统时间后 xff0c 存入MySQL数据库时 xff0c 当时间的类型为datetime或Timestamp时发现数据库的存储与本地时间不一致 很大原因是 xff0c MySQL设置的时区与你本地时区不一致造成的 xff
  • 在运用Putty连接远程服务器时遇到的坑:server unexpectedly closed network

    在运用Putty连接远程服务器时遇到的坑 xff1a server unexpectedly closed network 如果是在Putty需输入那个密码的 xff0c 那个密码是默认不显示 xff0c 你输完后一定要记得敲回车 xff0
  • Java中的==与equals()的区别(1)

    Java中的 61 61 与equals 的区别 xff08 1 xff09 package study public class Note1 public static void main String args TODO Auto ge
  • cookie,session和token详解和区别

    目录 前言 1 cookie和session是为了解决什么问题产生的 xff1f 2 什么是会话技术 xff1f 3 cookie详解 Cookie的表示 Cookie的组成 Cookie的HTTP传输 Cookie的生命周期 cookie
  • 读 Thinking in Java 笔记(1)

    读 Thinking in Java 笔记 xff08 1 xff09 请看下面这个例子 xff08 结构简单 xff0c 但各种创建可能会有点晕 xff0c 你可以通过它推出正确的打印顺序 xff0c 就基本过关了 xff0c 这里还包含
  • JAVA泛型的学习(1)

    JAVA泛型的学习 xff08 1 1 什么是泛型 xff1f 泛型 xff08 generic xff09 可以参数化类型 xff0c 使我们在定义带泛型类型的类或方法时 xff0c 随后编译器会用具体的类型来替换它 个人感觉与C 43
  • JAVA泛型的学习(2)

    JAVA泛型的学习 xff08 2 xff09 1 受限泛型类型 lt E extends xxx gt 将E指定为xxx的泛型子类型 非受限泛型 lt E gt 等同于 lt E extends Object gt public stat
  • JAVA泛型的学习(3)

    JAVA泛型的学习 xff08 3 xff09 1 消除泛型 泛型是使用一种成为类型消除的方法实现的 编译器使用泛型类型信息来编译代码 xff0c 但是随后会消除它 因此泛型信息在运行时是不可用的 泛型存在于编译时 xff0c 一旦编译器确