Java 中的类型擦除2024 年 9 月 10 日 | 阅读 3 分钟 Java 语言中引入泛型的概念,是为了在编译时进行更严格的类型检查,并支持泛型编程。为了实现泛型,Java 编译器应用类型擦除(Type Erasure)来
通常,编译后的泛型代码在谈论 P(或任何其他类型参数)时,实际上只使用了 java.lang.Object - 并且存在一些信息(元数据),告诉 Java 编译器它是一个泛型类型。当一个人针对方法或泛型类型编译代码时,Java 编译器会解析这个人真正想要的意思(即,编译器找出 P 的类型参数),并在编译时验证你是否在做正确的事情。然而,生成的代码仍然是根据 java.lang.Object 来处理的 - Java 编译器会在需要的地方生成额外的类型转换。在运行时,List 和 List 是相同的。Java 编译器会擦除额外的类型信息。 编译后,类型参数 P 被默认的 Object 替换。请看以下程序。 让我们来看另一个例子,其中类型参数 P 扩展了 java.lang.String 类。 编译后,我们得到 类型擦除的实现让我们看一个类型擦除实现的例子。 文件名: TypeErasure2.java 输出 Hello World 解释: 在这里,当代码编译时,编译器不会发出任何警告。这是由于类型擦除。 现在,请看下面的程序。 文件名: TypeErasure3.java 当我们使用 javac 命令编译上述程序时,我们会收到以下警告。这是因为类型擦除,因为程序中没有指明所使用的 List 的类型。 注意:TypeErasure3.java 使用了未检查或不安全的操作。使用 -Xlint:unchecked 重新编译以获取详细信息。输出仍然相同。 输出 Hello World |
Java ConcurrentSkipListSet 类实现了 Collection 接口和 AbstractSet 类,作为 Java Collection Framework 的一部分。它提供了 Java 中 NavigableSet 的并发、可扩展版本。ConcurrentSkipListSet 在其实现中基于 ConcurrentSkipListMap。取决于是否使用构造函数,条目...
阅读 16 分钟
在 Java 中,final 是一个关键字,它保证了原始类型的不可变性。它还保证一个变量只被赋值一次。如果一个对象是可变的,即使它被定义为 final,我们也可以改变它的内容。在本节中,我们...
阅读 2 分钟
Java IO 包提供了几种在 Java 中将字符串追加到现有文件的方法。将字符串追加到文件意味着将新数据添加到现有文件的末尾,而不会覆盖或删除之前的数据。方法:将字符串追加到文件。追加...
阅读 4 分钟
在本节中,我们将学习 Java 中的断言操作及其相应的示例。我们还将学习相应的断言类型。Java 中的断言是什么?“assert”关键字在 Java 中执行断言操作。断言的概念...
5 分钟阅读
在方法之间传递和返回对象是 Java 编程的基本功能,对于创建可靠的、模块化的程序至关重要。在本节中,我们将讨论 Java 中对象传递和返回,探索各种类型和方法,并提供完整的...
5 分钟阅读
在 Java 中,Iterator 和 ListIterator 都用于遍历集合。Iterator 允许仅向前遍历,并提供 next() 和 remove() 等基本操作。相比之下,ListIterator 支持双向遍历,以及 add()、set() 和 previous() 等附加操作,使其更加通用。Iterator Iterator 接口是...
5 分钟阅读
这是 Google、Amazon、TCS、Accenture 等顶级 IT 公司面试中经常提出的问题。通过解决问题,人们希望检查面试者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将...
阅读 4 分钟
埃拉托色尼筛法是识别给定数字(上限)之内的所有素数的最有效算法之一。上述过程是以古希腊数学家埃拉托色尼的名字命名的,他开发了这项智能技术。它基于一个简单的原理:每个...
5 分钟阅读
排序是将列表或数组的元素按特定顺序排列的一种方法。顺序可以是升序或降序。数值顺序和字典序(字母顺序)是一种广泛使用的顺序。在本节中,我们将学习如何对数组进行排序...
阅读 6 分钟
它是数学和计算机科学中最著名的数列之一,斐波那契数列。从 0 和 1 开始,系列中的每一项都是前两项的总和,给出一个通常看起来像:0、1、1、2、3、5、...的系列。
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India