`
lucene3212
  • 浏览: 138089 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

再论泛型

    博客分类:
  • java
阅读更多
     
<h1><span lang="en-us">why</span><span>,java为什么需要泛型?</span></h1>
<h1><span lang="en-us">how</span><span>,擦除,一种折中方案</span></h1><p class="msonormal"><span>泛型其实算不上是一种语言特性,它只是</span><span lang="en-us">java</span><span>实现泛型技术的一种折中,至于为什么选择擦除,我猜可能是为了保持向后兼容,使得泛型代码和非泛型代码能够共存。为了保持向后兼容,泛型对</span><span lang="en-us">jvm</span><span>是不可见的,也就是</span><span lang="en-us">jvm</span><span>根本不需要做很多变化,因为既然你实现泛型的主要目标是提供编译时期的类型检查安全,那么很多工作都应该在编译时期做,实际上也是这样的,擦除也就是这么一个原理,在运行时期看不见任何泛型参数,</span><span lang="en-us">jvm</span><span>执行泛型代码就像执行以前的普通代码一样!(当然不做任何改变也是不可能的,可以参考</span><span lang="en-us">http://icyfenix.iteye.com/blog/1021949</span><span>)。</span>
list<string > list = new arrarylist<string>();list.add(“cantellow”);int integer = list.get(0);//compile error
 
<span>然后,将参数化类型中的类型参数</span><span lang="en-us">"</span><span>擦除</span><span lang="en-us">"</span><span>(</span><span lang="en-us">erasure</span><span>)掉,并且将类型变量用</span><span lang="en-us">"</span><span>上限(</span><span lang="en-us">upper bound</span><span>)</span><span lang="en-us">"</span><span>取代,通常情况下这些上限是</span><span lang="en-us"> object</span><span>。这里的类型变量是指实例域,本地方法域,方法参数以及方法返回值中用来标记类型信息的</span><span lang="en-us">"</span><span>变量</span><span lang="en-us">"</span><span>,例如:实例域中的变量声明</span><span lang="en-us"> a elem;</span><span>,方法声明</span><span lang="en-us"> node (a elem){};</span><span>,其中,</span><span lang="en-us">a </span><span>用来标记</span><span lang="en-us"> elem </span><span>的类型,它就是类型变量。</span>
<p class="msonormal"><span lang="en-us"> </span>
list<integer> li = new arraylist<integer>(); list<number> ln = li; // illegal ln.add(new float(3.1415)); 
 
<span>因为</span><span lang="en-us"> ln</span><span>是</span><span lang="en-us"> list<number></span><span>,所以向其添加</span><span lang="en-us"> float</span><span>似乎是完全合法的。但是如果</span><span lang="en-us"> ln</span><span>是</span><span lang="en-us"> li</span><span>的别名,那么这就破坏了蕴含在</span><span lang="en-us"> li</span><span>定义中的类型安全承诺</span><span lang="en-us"> —— </span><span>它是一个整数列表,这就是泛型类型不能协变的原因。</span>
<h2><span>获取泛型类型</span></h2><p class="msonormal"><span>更多信息可以参考讨论:</span><span lang="en-us">http://www.iteye.com/topic/585900</span> 
0
8
分享到:
评论

相关推荐

    Java泛型技术之发展

    Java泛型技术的发展历程及其在JDK1.4中的实现,是IT领域特别是软件开发与设计中的一个重要里程碑。本文将深入探讨泛型技术的概念、历史背景、与其它编程概念的区别,以及其在Java语言中的具体应用。 ### 泛型技术...

    泛型编程与伴随.pdf

    - 对于希望深入了解泛型编程和范畴论的读者来说,本文档提供了一个很好的起点。 - 通过本文档的学习,读者不仅能掌握伴随的基本概念,还能了解到其在编程实践中的具体应用。 综上所述,伴随不仅是一种理论上的构造,更是...

    泛型程式设计与STL.pdf

    ### 泛型程式设计与STL #### 一、概览与重要性 - **标题与描述中的核心概念**:标题“泛型程式设计与STL”与描述中提到的“欢迎下载”,简明地表达了这份文档的主要内容是关于泛型编程与标准模板库(STL)的介绍和...

    C++标准模板库STL和泛型编程简介

    它不仅提供了常见的数据结构和算法,还引入了一种新的编程方法论——泛型编程。通过STL,C++开发者可以更容易地实现复杂的数据处理任务,同时保持代码的简洁和高效。 ### 总结 STL是C++编程中不可或缺的一部分,它...

    泛型编程和设计新思维.pdf

    随着计算机科学的发展,软件开发的方法论也在不断地进步和完善。《泛型编程与设计新思维》这一文档深入探讨了泛型编程的概念及其在现代软件工程中的应用。本文将根据提供的文档信息,详细解释泛型编程的基本原理、...

    一种抽象泛型机制的新型Java实现.pdf

    在描述中提到的“高抽象的泛型机制”可能指的是更加抽象层面的泛型编程方法,它有助于简化泛型程序的设计和描述,同时提高泛型构件的可重用性和可靠性。 在提供的文件内容摘录中,作者提到了一个名为“Apla”的抽象...

    Java Web程序运用中泛型DAO的作用.pdf

    本文探讨了在Java Web程序中应用泛型DAO模式的作用和意义。首先,文章明确了Java Web技术的定义和在互联网领域中的重要性,阐述了随着软件功能需求的不断提高,Java Web技术也在不断升级和改造。随后,文章指出泛型...

    分布式系统原理与泛型(第2版)英文版

    标题《Distributed Systems Principles and Paradigms》(分布式系统原理与泛型)第二版英文版表明,本书是一本专注于分布式系统理论与设计的教材。从Andrew S. Tanenbaum的介绍中,我们可以得知作者是计算机科学界...

    数据:Erlang的纯函数式和泛型编程

    Erlang 是一种为并发、分布式和容错系统设计的编程语言,它的核心特点在于其纯函数式编程范式以及强大的泛型编程能力。下面将详细介绍这两个方面。 ### 1. 纯函数式编程 在 Erlang 中,函数式编程的核心理念是避免...

    C_本质论(中文版).rar

    《C#本质论》是C#编程领域的一部经典之作,专为想要深入理解C#语言的程序员设计。这本书详细地介绍了C#的核心概念、语法结构以及编程实践,旨在帮助读者掌握C#的本质,从而更好地利用这一强大的面向对象语言进行软件...

    C#本质论中文版+英文版,pdf

    《C#本质论》是一本深入探讨C#编程语言核心概念和技术的经典著作,分为中文版和英文版。这本书由著名编程专家撰写,旨在帮助读者理解C#语言的本质,从而更好地运用到实际开发中。以下是对书中主要知识点的详细阐述:...

    Generic Programming for Scientific Computing in C++, Java, and C#

    ### 泛型编程在科学计算中的应用:C++、Java与C#的比较 #### 摘要概览 本文是一篇关于泛型编程在科学计算领域应用的研究论文。研究对比了Java、C#和C++三种语言在实现泛型(参数化类型)方面的表现,并重点介绍了...

    C#本质论(中文版).pdf

    《C#本质论》是一本深入探讨C#编程语言核心概念和技术的中文书籍。C#是由微软公司开发的一种面向对象的、类型安全的编程语言,主要用于构建Windows平台上的应用程序,尤其是.NET框架下的应用。这本书旨在帮助读者...

    c#本质论,一本不错的c#方面的电子书

    3. **泛型**:C#的泛型允许创建可重用的类型安全组件,书中有专门章节讨论泛型类、泛型接口、泛型方法和泛型委托,以及它们在集合类型中的应用。 4. **C#高级特性**:涵盖匿名类型、动态类型、Lambda表达式、LINQ...

    c#7.0本质论带图片完整版

    4. **递归泛型(Recursive Generics)**:允许在泛型类或接口中引用未定义的自身,为复杂数据结构的设计提供了更多灵活性。 5. **throw表达式(Throw Expressions)**:可以在表达式中直接抛出异常,而不需要括号...

    C#本质论(中文版)_C#本质论+第4版_C#本质论_c#本质_

    6. 泛型:泛型允许在不指定具体类型的情况下定义类和方法,从而实现了类型参数化,提高了代码的复用性和安全性。 7. 动态编程:C# 4.0引入了动态类型,允许在运行时确定对象的类型,使C#能够更好地与非.NET平台的库...

Global site tag (gtag.js) - Google Analytics