- 浏览: 173514 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
1055229269mao:
一起学习,一起进步
servlet登陆过滤器 -
1055229269mao:
亲测好用。非常感谢了
servlet登陆过滤器 -
wx_hello:
此行:Builder builder = new BookDo ...
xml 解析例子 -
wx_hello:
我想说楼主,你那个SAX解析的不对吧。。貌似使用的dom解析出 ...
xml 解析例子 -
hxp520520:
下了源码,正研究
java ip 查询定位 QQwry.dat
轻松掌握 Java 泛型Java Tiger 版本和 JSR-14 原型编译器中的泛型指南 |
级别: 初级 Eric E. Allen (eallen@cs.rice.edu), 博士研究生, Rice 大学 Java 编程语言团队 2003 年 5 月 14 日 本月的 诊断 Java 代码介绍泛型类型(generic type)和支持它们的特性,计划在 2003 年末发布的 Tiger,也就是 Java V1.5 中打算包含这些泛型和特性。Eric Allen 提供了代码样本,这些样本通过重点描述诸如基本类型的限制、受限泛型和多态方法之类的 Tiger 特性来说明泛型类型的优缺点(即将发表的专栏文章将讨论其它特性,比如 Tiger 中泛型类型的特定表现以及可能扩展为 Tiger 之外的泛型类型)。请通过单击文章顶部或底部的 讨论进入 论坛,与作者和其他读者分享您对本文的心得体会。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> J2SE 1.5 - 代号为 Tiger - 计划在 2003 年年底发布。我一直都热衷于尽可能多地收集有关即将推出的新技术的预告信息,因此我将撰写一系列的文章,讨论可从 V1.5 中获得的新的和经过重组的特性,本文是第一篇。我特别想谈谈泛型类型并重点讲述在 Tiger 中为了支持它们而进行的更改和调整。 在许多方面,Tiger 肯定是迄今为止在 Java 编程方面(包括对源语言语法的重大扩展)所取得的最大进步。Tiger 中计划进行的最显著的变化是添加泛型类型,正如在 JSR-14 原型编译器中所预先展示的那样(您可以立即免费下载该编译器;请参阅 参考资料)。 让我们从介绍泛型类型是什么以及添加了什么特性来支持它们开始吧。 为理解泛型类型为何如此有用,我们要将注意力转向 Java 语言中最容易引发错误的因素之一 - 需要不断地将表达式向下类型转换(downcast)为比其静态类型更为具体的数据类型(请参阅 参考资料中的“The Double Descent bug pattern”,以了解进行数据类型转换时,可能会碰到的麻烦的某些方面)。 程序中的每个向下类型转换对于 在 Java 语言中进行向下类型转换最常见的原因在于,经常以专用的方式来使用类,这限制了方法调用所返回的参数可能的运行时类型。例如,假定往 但是在目前现有的 Java 语言版本中,不可能将散列表的特定键和元素声明为比 清单 1. 插入/检索类型说明表明只能是任意对象
因此,当我们从类 清单 2. 将检索到的值强制转换成 String
请注意
要消除如上所述的数据类型转换,有一种普遍的方法,就是用 泛型类型来增大 Java 类型系统。可以将泛型类型看作是类型“函数”;它们通过类型变量进行参数化,这些类型变量可以根据上下文用各种类型参数进行 实例化。 例如,与简单地定义类 清单 3. 定义泛型 Hashtable 类
然后可以引用这些类型参数,就像我们在类定义主体内引用普通类型那样,如下所示: 清单 4. 像引用普通类型那样引用类型参数
类型参数的作用域就是相应类定义的主体部分(除了静态成员之外)(在下一篇文章中,我们将讨论为何 Tiger 实现中有这样的“怪习”,即必须对静态成员进行此项限制。请留意!)。 创建一个新的 清单 5. 创建将 Integer 映射为 String 的实例
现在不再需要数据类型转换了。请注意用来实例化泛型类 清单 6. 除去不必要的数据类型转换
当然,程序员若只是为了能使用泛型类型而必须重新定义所有的标准实用程序类(比如
Tiger 中类型变量的限制之一就是,它们必须用引用类型进行实例化 - 基本类型不起作用。因此,在上面这个示例中,无法完成创建从 这很遗憾,因为这意味着只要您想把基本类型用作泛型类型的参数,您就必须把它们组装为对象。另一方面,当前的这种情况是最糟的;您不能将 我们真正想看到的是,基本类型可以自动进行包装(boxing)和解包装(unboxing),类似于用 C# 所进行的操作(或者比后者更好)。遗憾的是,Tiger 不打算包括基本类型的自动包装(但是人们可以一直期待 Java 1.6 中出现该功能!)。
有时我们想限制可能出现的泛型类的类型实例化。在上面这个示例中,类 例如,我们可能想定义泛型 有时我们想用 getter 检索被包含的 清单 7. 用 extends 子句来说明 MyPane 声明
当然,我们可以完全不使用显式的范围,只要能确保没有用不适当的类型来实例化类型参数。 为什么要自找麻烦在类型参数上设定范围呢?这里有两个原因。首先,范围使我们增加了静态类型检查功能。有了静态类型检查,就能保证泛型类型的每次实例化都符合所设定的范围。 其次,因为我们知道类型参数的每次实例化都是这个范围之内的子类,所以可以放心地调用类型参数实例出现在这个范围之内的任何方法。如果没有对参数设定显式的范围,那么缺省情况下范围是
除了用类型参数对类进行参数化之外,用类型参数对方法进行参数化往往也同样很有用。泛型 Java 编程用语中,用类型进行参数化的方法被称为 多态方法(Polymorphic method)。 多态方法之所以有用,是因为有时候,在一些我们想执行的操作中,参数与返回值之间的类型相关性原本就是泛型的,但是这个泛型性质不依赖于任何类级的类型信息,而且对于各个方法调用都不相同。 例如,假定想将 但是我们确实希望该类型变量 清单 8. 将类型参数作为前缀添加到方法声明
除了多态方法中所增加的灵活性之外,Tiger 中还增加了一个优点。Tiger 使用类型推断机制,根据参数类型来自动推断出多态方法的类型。这可以大大减少方法调用的繁琐和复杂性。例如,如果想调用 清单 9. 强制 make 构造新实例
然后会自动地从方法参数中推断出类型参数的实例化。
正如我们所见到的那样,在 Java 语言中添加泛型类型肯定会大大增强我们使用静态类型系统的能力。学习如何使用泛型类型相当简单,但是同样也需要避免一些缺陷。在接下来的文章中,我们将讨论如何充分使用将出现在 Tiger 中的泛型类型的特定表现,以及一些缺陷。我们还将研究对泛型 Java 类型工具的扩展,我们期盼这些工具可以出现在仍处于设计阶段的 Java 平台之中。
|
发表评论
-
Port 80 or 443 (SSL) already in use ! Installing Apache2.2 service failed!的解决方案
2011-02-15 10:16 2960Port 80 or 443 (SSL) already in ... -
java断言 assert
2010-04-14 02:37 1482java 断言 assert 初步使用:断言开启、断言使用主要 ... -
java抽取word,pdf的四种武器
2010-03-12 16:37 1486很多人用java进行文档操作时经常会遇到一个问题,就是如何获得 ... -
Java调用com组件操作word使用总结
2010-03-12 16:35 2176一、准备工作 先了解一下概念,JACOB 就是 J ... -
Java操作office 2007文档
2010-03-12 16:23 1791我们希望将Office 20 ... -
java平台下通过jacob对excel,word进行打印等操作
2010-03-09 09:22 2849因为项目有个需求,要求能够在某个预定时间对特定报表进行自动打印 ... -
An internal error occurred during: "JSP Semantics Validator (JSF)". org/eclipse/
2009-11-17 11:58 2208An internal error occurred duri ... -
Comparator和Comparable比较
2009-09-22 23:40 833当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comp ... -
struts验证框架开发
2009-09-10 17:38 809一、启用Validator插件 虽然Validator框 ... -
在jsp环境中配置使用FCKEditor
2009-09-09 21:32 751FCKeditor是sourcefor ... -
配置FCKeditor(FCKeditor for java)
2009-09-09 21:28 12381.下载FCKeditor.java ... -
Java排序算法
2009-07-20 15:52 1062public class Sort { public ... -
log4j配置详
2009-07-17 14:59 702log4j详解 ... -
关于java打印功能的最简单实现的学习笔记
2009-07-16 17:03 2369<scr ... -
Java高级编程:打印--学习如何使用打印服务API
2009-07-16 16:36 1726作者:Brett Spell 翻 ... -
Tomcat 配置
2009-07-15 11:00 861Tomcat启动分析 1 - To ... -
键盘快捷键大全
2009-07-01 09:48 1030、常见用法: F1 ... -
Linux必学60个命令文件处理
2009-07-01 09:47 977linux系统信息存放在文 ... -
pager-taglib使用指南【转】
2009-06-30 16:38 7402009-05-13 09:49 一简介, ... -
pager-taglib使用指南【转】
2009-06-30 16:37 7362009-05-13 09:49 一简介, ...
相关推荐
Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...
Java 泛型详解 Java 泛型是 Java SE 5.0 中引入的一项特征,它允许程序员在编译时检查类型安全,从而减少了 runtime 错误的可能性。泛型的主要优点是可以Reusable Code,让程序员编写更加灵活和可维护的代码。 ...
Java泛型是Java编程语言中的一个强大特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现代码的重用和类型安全。在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时...
Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...
综上所述,虽然Java泛型在编译后会进行类型擦除,但通过上述技巧,我们仍然能够在运行时获得关于泛型类实例化类型的一些信息。在实际开发中,这些方法可以帮助我们编写更加灵活和安全的代码。在示例文件`GenericRTTI...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入。这个特性极大地提高了代码的类型安全性和可读性,减少了在运行时出现ClassCastException的可能性。SUN公司的Java泛型编程文档,包括...
下面我们将详细探讨Java泛型接口的相关知识点。 1. **泛型接口的定义** 泛型接口的定义方式与普通接口类似,只是在接口名之后添加了尖括号`<T>`,其中`T`是一个类型参数,代表某种未知的数据类型。例如: ```java...
下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法,这些类型参数可以在方法声明时指定,并在方法体内部使用。与类的泛型类似,它们提供了编译时...
Java泛型是Java编程语言中的一个强大特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。这使得代码更加安全、可读性更强,并且能够减少类型转换的必要。在“java泛型的内部原理及更深应用”这个...
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
Java 泛型是一种强大的工具,它允许我们在编程时指定变量的类型,提供了编译时的类型安全。然而,Java 的泛型在运行时是被擦除的,这意味着在运行时刻,所有的泛型类型信息都会丢失,无法直接用来创建对象或进行类型...
"Java 泛型学习" Java 泛型是 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的...
Java 泛型使用详细分析 Java 泛型是 Java 语言中的一种类型系统特性,允许开发者在编译期检查类型安全,以避免在运行时出现类型相关的错误。在本文中,我们将详细介绍 Java 泛型的使用方法和实现原理。 一、泛型的...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...
#### 一、什么是Java泛型? Java泛型(Generics)是一种在编译时确保类型安全的机制,它允许程序员编写类型安全的通用类或方法,而无需进行显式的类型转换。在Java 1.5引入泛型之前,集合类(如`ArrayList`)只能...