`
Baple
  • 浏览: 12221 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
文章分类
社区版块
存档分类
最新评论

Java 中的泛型与 C++ 模板的比较

阅读更多
泛型本质上是提供类型的"类型参数",它们也被称为参数化类型(parameterized type)或参量多态(parametric polymorphism)。其实泛型思想并不是 Java 最先引入的,C++ 中的模板就是一个运用泛型的例子。

GJ (Generic Java)是对 Java 语言的一种扩展,是一种带有参数化类型的 Java 语言。用 GJ 编写的程序看起来和普通的 Java 程序基本相同,只不过多了一些参数化的类型同时少了一些类型转换。实际上,这些 GJ 程序也是首先被转化成一般的不带泛型的 Java 程序后再进行处理的,编译器自动完成了从 Generic Java 到普通 Java 的翻译。

GJ 程序的语法在表面上与 C++ 中的模板非常类似,但是二者之间有着本质的区别。

首先,Java 语言中的泛型不能接受基本类型作为类型参数――它只能接受引用类型。这意味着可以定义 List<Integer>,但是不可以定义 List<int>。

其 次,在 C++ 模板中,编译器使用提供的类型参数来扩充模板,因此,为 List<A> 生成的 C++ 代码不同于为 List<B> 生成的代码,List<A> 和 List<B> 实际上是两个不同的类。而 Java 中的泛型则以不同的方式实现,编译器仅仅对这些类型参数进行擦除和替换。类型 ArrayList<Integer> 和 ArrayList<String> 的对象共享相同的类,并且只存在一个 ArrayList 类。
分享到:
评论

相关推荐

    介绍 JDK 5中泛型

    到目前为止,Java 类库中泛型支持...就像容器类是 C++ 语言中模板的主要动机一样改善集合类的类型安全是 Java 语言中泛型的主要动机。集合类也充当如何使用泛型的模型,因为它们演示了泛型的几乎所有的标准技巧和方言。

    Eclipse3.1中的Java泛型支持

    火龙果软件工程技术中心 Java5提供泛型支持,泛型支持是开发人员多年以来所要求的特性。它代表了Java编程语言一次具有重要意义的升级。...C++通过标准模板库对泛型进行支持,但是由于缺少所有其他类(嵌入在Java语言中

    java泛型指南中文版

    java泛型是一个很不错的功能,类似于C++模板,但是仅仅只是类似,实现方法完全不同,本文是一个学习泛型很好的入门资料

    聊聊Java的泛型及实现

     泛型是对Java语言类型系统的一种扩展,有点类似于C++的模板,可以把类型参数看作是使用参数化类型时指定的类型的一个占位符。引入泛型,是对Java语言一个较大的功能增强,带来了很多的好处:  1、类型安全。...

    C++必知必会.rar

    本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和培训老师的经验总结,对...

    C++必知必会(C++入门经典之作)

    本书描述了C++ 编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和培训老师 的经验总结,...

    JDK 1.5的泛型實現(Generics in JDK 1.5)

    閱讀本文之前,如果自覺基礎不夠,可以補充閱讀適才提到的《Java泛型技術之 發展》,那是一篇非常完整的文章,可助您完整認識泛型技術的來龍去脈。 Sun JDK的泛型發展歷史要從 1.3版說起。該版本配合 GJ,正式...

    失物招领平台源码java-cpp-to-java-source-converter:将C++转换为Java的翻译器。正在进行中的工作

    模板代码生成(改用泛型)。 C++/C 标准库 操作顺序差异 平台相关/未定义行为 工会 动态转换和其他 RTTI 功能 多重继承 C++11 特性 重载 operator new 和 operator delete 内存管理 其他一切都应该与初始版本一起...

    C++必知必会.7z.009

    本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和培训老师的经验总结,对与...

    C++必知必会.7z.004

    本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和培训老师的经验总结,对与...

    Effective C++ 中文版

    内容简介: 有人说C++程序员可以分成两类,读过Effective C++的和没读过的。世界顶级C++大师Scott Meyers成名之作的第三版...7.模板与泛型编程 8.定制new和delete 9.杂项讨论 A 本书之外 B 新旧版条款对映 索引

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA上百实例源码以及开源项目

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA泛型排序算法设计思想 (2011年)

    论述了JAVA泛型排序设计思想。通过移植C++标准模板库的partial_sort、nth_element函数算法,可方便实现java 下给定基本数据类型数组、对象数组、基本序列容器元素局部排序、求第nth元素功能,是对JAVA固有sort函数有效...

    C++必知必会.part1.rar

    2006/01/01 &lt;br&gt;本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和...

    C++必知必会.part2.rar

    2006/01/01 &lt;br&gt;本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和...

    仿知乎java源码-Java2Cpp-Translator:Java到C++转换器

    仿知乎java源码SevenBobcat-Java2CppTranslator 翻译器支持将受限版本的 Java 翻译成 C++。 源语言是 Java 的受限版本,没有高级功能...将“testxxx”和“Testxxx.java”中的xxx替换为你要运行的Java类文件的编号。 输

    java开源包4

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包101

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

Global site tag (gtag.js) - Google Analytics