`
heylichen
  • 浏览: 2018 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

understanding cache of generics

阅读更多
泛型的好处:
    类型安全。 泛型的一个主要目标就是提高 Java 程序的类型安全。使用泛型可以使编译器知道变量的类型限制,进而可以在更高程度上验证类型假设。如果没有泛型,那么类型的安全性主要由程序员来把握,这显然不如带有泛型的程序安全性高。
消除强制类型转换。泛型可以消除源代码中的许多强制类型转换,这样可以使代码更加可读,并减少出错的机会。
    向后兼容。支持泛型的 Java 编译器(例如 JDK5.0 中的 Javac)可以用来编译经过泛型扩充的 Java 程序(GJ 程序),但是现有的没有使用泛型扩充的 Java 程序仍然可以用这些编译器来编译。
    层次清晰,恪守规范。无论被编译的源程序是否使用泛型扩充,编译生成的字节码均可被虚拟机接受并执行。也就是说不管编译器的输入是 GJ 程序,还是一般的 Java 程序,经过编译后的字节码都严格遵循《 Java 虚拟机规范》中对字节码的要求。可见,泛型主要是在编译器层面实现的,它对于 Java 虚拟机是透明的。
    性能收益。目前来讲,用 GJ 编写的代码和一般的 Java 代码在效率上是非常接近的。 但是由于泛型会给 Java 编译器和虚拟机带来更多的类型信息,因此利用这些信息对 Java 程序做进一步优化将成为可能。

java 编译器对泛型的转化:
将参数化类型中的类型参数"擦除"(erasure)掉;
将类型变量用"上限(upper bound)"取代,通常情况下这些上限是 Object。这里的类型变量是指实例域,本地方法域,方法参数以及方法返回值中用来标记类型信息的"变量",例如:实例域中的变量声明 A elem;,方法声明 Node (A elem){};,其中,A 用来标记 elem 的类型,它就是类型变量。
添加类型转换并插入"桥方法"(bridge method),以便覆盖(overridden)可以正常的工作。

Java 中的泛型与 C++ 模板的比较
GJ 程序的语法在表面上与 C++ 中的模板非常类似,但是二者之间有着本质的区别。
首先,Java 语言中的泛型不能接受基本类型作为类型参数――它只能接受引用类型。这意味着可以定义 List<Integer>,但是不可以定义 List<int>。
其次,在 C++ 模板中,编译器使用提供的类型参数来扩充模板,因此,为 List<A> 生成的 C++ 代码不同于为 List<B> 生成的代码,List<A> 和 List<B> 实际上是两个不同的类。而 Java 中的泛型则以不同的方式实现,编译器仅仅对这些类型参数进行擦除和替换。类型 ArrayList<Integer> 和 ArrayList<String> 的对象共享相同的类,并且只存在一个 ArrayList 类。

原文见:
引用






分享到:
评论

相关推荐

    Design and Implementation of Generics for the .NET CLR

    ### 泛型在.NET Common Language Runtime中的设计与实现 #### 概述 本文档由微软研究院的Andrew Kennedy和Don Syme撰写,详细介绍了.NET Common Language Runtime(CLR)中泛型特性的设计与实现过程。...

    generics:“ Understanding Java 8 Generics”视频课程的源代码-java source code

    在"Understanding Java 8 Generics"的视频课程中,你可能会学习到如何有效地利用泛型来编写更加灵活和可重用的代码。这个压缩包文件"generics-master"很可能包含了与课程相关的所有源代码示例。 泛型的基本概念是...

    delphi-generics.rar_delphi Generics_delphi2009_made

    CodeGear Delphi2009 has lots of new features like use of Generics in Delphi. Generic methods, procedures and data types are made easy to use datatype free working with you classes.

    Java Generics and Collections

    在Java中,泛型(Generics)引入于J2SE 5.0,目的是提供类型安全的集合,避免了在集合操作中强制类型转换的需要,同时也消除了运行时可能发生的ClassCastException。而集合框架(Collections Framework)是一组接口...

    Java Generics and Collections (Java泛型与集合)

    本书"Java Generics and Collections"深入探讨了这两个主题,帮助开发者编写更安全、更高效且可维护的代码。 首先,让我们来理解Java泛型。泛型是Java 5引入的一项特性,它允许在类、接口和方法中使用类型参数。这...

    Generics_In_Java.rar_Dark

    A great tutorial about the use of Generics in Java. It comes with examples and other great stuff about this "dark" theme for a lot of students in Java

    generics-tutorial.pdf

    自JDK 1.5以来,Java编程语言引入了一系列重要的扩展功能,其中最重要的一个特性就是泛型(Generics)。本文档旨在向读者介绍Java中的泛型,并通过与类似语言如C++中的模板进行对比,帮助读者理解其相似性和差异性。...

    泛型generics.zip

    泛型(Generics)是JDK5引入的一种参数化类型特性。它提供了编译时类型安全检测机制。其本质是参数类型,所操控的数据类型被指定为一个参数。泛型不存在于JVM虚拟机。泛型学习、泛型限定类型、泛型通配符、泛型继承。...

    Java Generics FAQ

    Java泛型(Generics)是Java SE 5.0引入的一种新特性,它允许程序员在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。下面将根据给定的文件信息,深入解析Java泛型的一些核心知识点...

    Generics的用法

    在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在类、接口和方法中使用类型参数,从而增强了代码的类型安全性和重用性。本篇将深入探讨泛型的用法,以及其在源码和工具中的应用。 1. **泛型的...

    .Net 2.0 泛型高级编程(Professional .NET 2.0 Generics )

    《.Net 2.0 泛型高级编程》是一本由Tod Golding编著的专业技术书籍,专注于探讨.NET Framework 2.0中的泛型特性。泛型是.NET框架中的一个重要概念,它允许开发者创建可重用的类型安全的数据结构和算法,极大地提高了...

    generics:通用方法

    仿制药 generics旨在通过提供一组可以导入的泛型方法来帮助程序包作者减少依赖性。 例如,如果包作者希望为其对象包括一个tidy方法,则他们必须导入broom包才能这样做。 这会起作用,但可能会增加安装和/或测试...

    Collections & Generics in J2SE 1.5

    - `int indexOf(Object o)`:返回指定元素在列表中的首次出现位置。 - `int lastIndexOf(Object o)`:返回指定元素在列表中的最后一次出现位置。 - `ListIterator listIterator()`:返回列表的迭代器。 - `...

    Generics_in_the_Java_Programming_Language译文

    Java 泛型详解 Java 中的泛型是 Java 5(JDK 1.5)中引入的一项新特性,旨在解决类型安全和代码重用的问题。泛型允许程序员对类型进行抽象,使得代码更加灵活和可维护。 泛型的优点: 1. 类型安全:泛型可以在...

Global site tag (gtag.js) - Google Analytics