`
李灵晖-raylee
  • 浏览: 135628 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-13.6 类型擦除(type erasure)(1)-概念

 
阅读更多

这一章节我们讨论一下类型擦除。

1.什么是类型擦除?

在java里面泛型其实是伪泛型,因为他都只是在编译器里面实现的,在jvm里面是没有泛型的概念。

我们看下面的代码:

package com.ray.ch11;

import java.util.ArrayList;

public class Test {
	public static void main(String[] args) {
		ArrayList<Integer> list1 = new ArrayList<Integer>();
		ArrayList<String> list2 = new ArrayList<String>();
		System.out.println(list1.getClass() == list2.getClass());
	}
}

输出:

true


为什么两个list对应的Class对象是一致的呢?因为在jvm层面,他只看到List,没有里面的类型。

也就是,泛型里面的类型信息被擦掉了,这就是所谓的类型擦除。

2.扩展

我们使用另一个例子来扩展开来。

package com.ray.ch11;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;

public class Test {
	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		HashMap<String, String> map = new HashMap<String, String>();
		HashSet<String> set = new HashSet<String>();
		System.out
				.println(Arrays.toString(list.getClass().getTypeParameters()));
		System.out.println(Arrays.toString(map.getClass().getTypeParameters()));
		System.out.println(Arrays.toString(set.getClass().getTypeParameters()));
	}
}


输出:

[E]
[K, V]
[E]


从上面的输出,我们只是看见泛型的标记,但是完全不问清楚里面的类型信息,这是因为代码经过编译器后,类型信息被擦除了。

总结:这一章节我们引出类型擦除的概念。

这一章节就到这里,谢谢。

-----------------------------------

目录


分享到:
评论

相关推荐

    Java泛型类型擦除后的补偿

    本文将深入探讨Java泛型类型擦除的概念,并介绍在类型擦除后,为了保持泛型的安全性和便利性,Java设计者所采取的一些补偿机制。 1. **类型擦除**: - 在编译期间,所有的泛型类型信息都会被替换为它们的实际类型...

    rh-mongodb36-boost-type_erasure-1.60.0-2.el7.x86_64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    rh-mongodb34-boost-type_erasure-1.60.0-2.el7.x86_64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    论文研究-Optimizing Delay-Limited Erasure Error Correction Schemes for Wireless Multicast.pdf

    无线多播通信在实时数据传输场景下,如何确保在严格的时延限制内传输可靠性,这是一个挑战性问题。本文重点探讨了在严格时延限制条件下的通用纠错编码(EEC)结构,并提出了相应的数学分析框架以优化其性能表现。...

    spring-async-type-erasure:在Spring 4.1.6.RELEASE中演示类型擦除问题

    弹簧异步型擦除这是我描述的问题的证明。 有解决办法! 当使用@EnableAsync进行通用bean限定时,需要启用CGLib代理。 这意味着当将类转换为后端的异步代理时,将保留类型信息。解决方案@EnableAsync(proxyTarget...

    java-jls8.pdf

    文档还解释了类型擦除(Type Erasure)、可重用类型(Reifiable Types)和原始类型(Raw Types)的概念。 除了词法和语法细节,文档还包含了Java类对象(The Class Object)、字符串类(The Class String)、整数...

    Fast-algorithms-of-Reed-Solomon-erasure-codes

    从压缩包子文件的文件名称列表来看,"Fast-algorithms-of-Reed-Solomon-erasure-codes-master"很可能是一个源代码仓库的主分支,其中包含了实现快速算法的所有文件。开发者可以下载并编译这些源代码,研究其内部工作...

    java-collection-all-in-one.pdf

    类型擦除(Type Erasure)是Java泛型的一种机制,它在运行时移除泛型信息,以保证Java二进制兼容性。泛型类和接口在编译后会转换成原始类型,并在需要的时候插入类型转换操作。 总之,Java集合框架提供了丰富而强大...

    Python-zfec一个高效便携erasure编码工具

    1. **分布式存储系统**:如Ceph、Hadoop HDFS等,可以利用Python-zfec的Erasure编码能力提高数据的耐久性和可用性。 2. **云存储服务**:云服务提供商可以利用Python-zfec来提高存储效率,降低冗余数据的成本,同时...

    03-Samual.Just-recovery_erasure_coding_cache_tiering.pdf

    在2015年的上海Ceph Day活动中,Samuel Just 主讲了关于Ceph的一些核心技术和特性,特别是针对数据恢复(Recovery)、擦除编码(Erasure Coding)以及缓存分层(Cache Tiering)。这些技术是现代分布式存储系统中的...

    ocaml-reed-solomon-erasure:ReCam-Reed-Solomon纠删码的OCaml实现

    ocaml-reed-所罗门语消除 该项目已迁移到GitLab 您可以在查看新项目的仓库 ReCam-Reed-Solomon纠删码的OCaml实现 这是的端口,这是其他几个库的端口 港口进度 ... lib.rs &gt; reed_solomon_erasure.ml

    try-erasure:Swift Type-Erasure实施和基准

    尝试删除Swift Type-Erasure的示例实现和基准。 :warning: 不是图书馆 :warning: 让我们运行Benchmark项目。要求Xcode 9.3〜 斯威夫特4.1〜基调

    JVM如何理解Java泛型类.doc

    为了理解JVM如何处理泛型,我们需要了解一个重要的概念:“类型擦除”(Type Erasure)。类型擦除是指编译器在编译过程中去除所有泛型信息的过程。这一过程使得JVM不必直接支持泛型,因为所有泛型信息在编译后都被...

    马可夫链matlab源代码-remote-estimation-with-Bernoulli-erasure-channel:该存储库包含通过

    从任何状态“x”到状态“x+1”、“x-1”和“x”的转移概率分别为“p”、“p”和“1-2p”。 该模型的代码是用 MATLAB 编写的。 这些代码重现了论文中提出的结果: J. Chakravorty 和 A. Mahajan,“带丢包的远程状态...

    关于java泛型的小测试(wildcard,erasure,covariant,raw type)

    在本小测试中,我们将探讨几个与Java泛型相关的概念:通配符(Wildcards)、消除(Erasure)、协变(Covariance)和原始类型(Raw Types)。以下是对这些概念的详细解释: 1. **通配符(Wildcards)** - 通配符是...

    Swift如何使用类型擦除及自定义详解

    类型擦除(Type Erasure)是一种强大的特性,允许开发者隐藏某个类的具体类型,使其变得更通用。Swift 中的类型擦除可以通过协议或抽象父类来实现。 什么是类型擦除? 类型擦除是移除某个类的具体类型,使其变得更...

    Efficient and Available In-memory KV-Store with Hybrid Erasure Coding and Replication

    本文介绍了一种高效且可用的内存键/值存储(简称KV-store)系统,该系统通过结合擦除编码(Erasure Coding, EC)和复制(Replication)两种方法来提高内存效率,同时保持高性能。随着大规模Web应用的需求日益增长,...

    An Efficient I/O-Redirection-Based Reconstruction Scheme for Erasure-Coded Storage Clusters

    1. **擦除编码**:一种数据冗余技术,通过添加额外的数据块来提高数据的可靠性。当部分数据丢失时,可以通过其他数据块计算出丢失的数据。 2. **在线重构**:在不影响正常服务的情况下,对存储集群中故障节点的数据...

    Java 泛型(Generics)使用说明

    本例子说明演示了Java范型使用的动机、范型类的使用、范型方法的使用,以及范型的缺陷:类型擦除(type erasure).因为,现在Java的反射机制不能确定集合中的对象类型! 在实际应用中,如果能够灵活应用范型和反射...

    boost-type_erasure-1.66.0-10.el8.aarch64.rpm

    离线安装包,亲测可用

Global site tag (gtag.js) - Google Analytics