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) 的相关文章

  • 任务“:app:dexDebug”执行失败

    我目前正在处理我的项目 我决定将我的 Android Studio 更新到新版本 但在我导入项目后 它显示如下错误 Information Gradle tasks app assembleDebug app preBuild UP TO
  • 如何在 Eclipse 中用阿拉伯语读写

    我在 eclipse 中编写了这段代码来获取一些阿拉伯语单词 然后打印它们 public class getString public static void main String args throws Exception PrintS
  • 如何从另一个xml文件动态更新xml文件?

    我想从另一个 xml 文件更新 xml 文件 我使用了一个 xml 文件 如下所示 one xml
  • 使用 Spring 时实例化对象,用于测试与生产

    使用 Spring 时 应该使用 Spring 配置 xml 来实例化生产对象 并在测试时直接实例化对象 这样的理解是否正确 Eg MyMain java package org world hello import org springf
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • Java 变量的作用域

    我不明白为什么这段代码的输出是10 package uno public class A int x 10 A int x 12 new B public static void main String args int x 11 new
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦
  • 从 html 页面和 javascript 调用 java webservice

    我正在尝试从 javascript 调用 java 实现的 Web 服务 使用 NetBeans IDE 我读过很多关于 jQuery 和 AJAX 的内容 但我似乎无法掌握它 假设我的 Web 服务 WSDL 位于 http localh
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • 我想要一个 Java 阿拉伯语词干分析器

    我正在寻找阿拉伯语的 Java 词干分析器 我找到了一个名为 AraMorph 的库 但它的输出是无法控制的 并且它会形成不需要的单词 还有其他阿拉伯语词干分析器吗 这是新的阿拉伯语词干分析器 Assem 的阿拉伯语轻词干分析器 http
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • 如何将实例变量传递到 Quartz 作业中?

    我想知道如何在 Quartz 中外部传递实例变量 下面是我想写的伪代码 如何将 externalInstance 传递到此作业中 public class SimpleJob implements Job Override public v
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • 尝试使用带有有效购买令牌的 Java Google Play Developer API v3 检索应用内购买信息时出现错误请求(无效值)

    当使用 Java Google Play Developer API 版本 3 并请求有效购买令牌的购买信息时 我收到以下异常 API 调用返回 400 Bad Request 响应以及以下消息 code 400 errors domain

随机推荐

  • 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 一旦编译器确