- 浏览: 163328 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
saintwe:
我现在有个论坛是:www.xxx.com/bbs 是PHP的开 ...
Apache VirtualHost的用法 -
liubang201010:
Jprobe最新版本下载:
http://www.innov ...
Jprobe 下载 -
liubang201010:
Jprobe最新版本 v8.3下载:
http://www.i ...
Jprobe 下载 -
cl1154781231:
native2ascii -reverse -encoding ...
中文编码转Unicode -
wmlJava:
java_2008_4_4 写道这么一个需求:同一台服务器上有 ...
Apache VirtualHost的用法
诊断 Java 代码: 轻松掌握 Java 泛型http://www.ibm.com/developerworks/cn/java/j-djc02113/ 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 之外的泛型类型)。请通过单击文章顶部或底部的 讨论进入 论坛,与作者和其他读者分享您对本文的心得体会。 J2SE 1.5 - 代号为 Tiger - 计划在 2003 年年底发布。我一直都热衷于尽可能多地收集有关即将推出的新技术的预告信息,因此我将撰写一系列的文章,讨论可从 V1.5 中获得的新的和经过重组的特性,本文是第一篇。我特别想谈谈泛型类型并重点讲述在 Tiger 中为了支持它们而进行的更改和调整。 在许多方面,Tiger 肯定是迄今为止在 Java 编程方面(包括对源语言语法的重大扩展)所取得的最大进步。Tiger 中计划进行的最显著的变化是添加泛型类型,正如在 JSR-14 原型编译器中所预先展示的那样(您可以立即免费下载该编译器;请参阅 参考资料)。 让我们从介绍泛型类型是什么以及添加了什么特性来支持它们开始吧。 为理解泛型类型为何如此有用,我们要将注意力转向 Java 语言中最容易引发错误的因素之一 - 需要不断地将表达式向下类型转换(downcast)为比其静态类型更为具体的数据类型(请参阅 参考资料中的“The Double Descent bug pattern”,以了解进行数据类型转换时,可能会碰到的麻烦的某些方面)。 程序中的每个向下类型转换对于 在 Java 语言中进行向下类型转换最常见的原因在于,经常以专用的方式来使用类,这限制了方法调用所返回的参数可能的运行时类型。例如,假定往 但是在目前现有的 Java 语言版本中,不可能将散列表的特定键和元素声明为比
因此,当我们从类
请注意
要消除如上所述的数据类型转换,有一种普遍的方法,就是用 泛型类型来增大 Java 类型系统。可以将泛型类型看作是类型“函数”;它们通过类型变量进行参数化,这些类型变量可以根据上下文用各种类型参数进行 实例化。 例如,与简单地定义类
然后可以引用这些类型参数,就像我们在类定义主体内引用普通类型那样,如下所示:
类型参数的作用域就是相应类定义的主体部分(除了静态成员之外)(在下一篇文章中,我们将讨论为何 Tiger 实现中有这样的“怪习”,即必须对静态成员进行此项限制。请留意!)。 创建一个新的
现在不再需要数据类型转换了。请注意用来实例化泛型类
当然,程序员若只是为了能使用泛型类型而必须重新定义所有的标准实用程序类(比如
Tiger 中类型变量的限制之一就是,它们必须用引用类型进行实例化 - 基本类型不起作用。因此,在上面这个示例中,无法完成创建从 这很遗憾,因为这意味着只要您想把基本类型用作泛型类型的参数,您就必须把它们组装为对象。另一方面,当前的这种情况是最糟的;您不能将 我们真正想看到的是,基本类型可以自动进行包装(boxing)和解包装(unboxing),类似于用 C# 所进行的操作(或者比后者更好)。遗憾的是,Tiger 不打算包括基本类型的自动包装(但是人们可以一直期待 Java 1.6 中出现该功能!)。
有时我们想限制可能出现的泛型类的类型实例化。在上面这个示例中,类 例如,我们可能想定义泛型 有时我们想用 getter 检索被包含的
当然,我们可以完全不使用显式的范围,只要能确保没有用不适当的类型来实例化类型参数。 为什么要自找麻烦在类型参数上设定范围呢?这里有两个原因。首先,范围使我们增加了静态类型检查功能。有了静态类型检查,就能保证泛型类型的每次实例化都符合所设定的范围。 其次,因为我们知道类型参数的每次实例化都是这个范围之内的子类,所以可以放心地调用类型参数实例出现在这个范围之内的任何方法。如果没有对参数设定显式的范围,那么缺省情况下范围是
除了用类型参数对类进行参数化之外,用类型参数对方法进行参数化往往也同样很有用。泛型 Java 编程用语中,用类型进行参数化的方法被称为 多态方法(Polymorphic method)。 多态方法之所以有用,是因为有时候,在一些我们想执行的操作中,参数与返回值之间的类型相关性原本就是泛型的,但是这个泛型性质不依赖于任何类级的类型信息,而且对于各个方法调用都不相同。 例如,假定想将 但是我们确实希望该类型变量
除了多态方法中所增加的灵活性之外,Tiger 中还增加了一个优点。Tiger 使用类型推断机制,根据参数类型来自动推断出多态方法的类型。这可以大大减少方法调用的繁琐和复杂性。例如,如果想调用
然后会自动地从方法参数中推断出类型参数的实例化。
正如我们所见到的那样,在 Java 语言中添加泛型类型肯定会大大增强我们使用静态类型系统的能力。学习如何使用泛型类型相当简单,但是同样也需要避免一些缺陷。在接下来的文章中,我们将讨论如何充分使用将出现在 Tiger 中的泛型类型的特定表现,以及一些缺陷。我们还将研究对泛型 Java 类型工具的扩展,我们期盼这些工具可以出现在仍处于设计阶段的 Java 平台之中。
|
发表评论
-
使用 UNIX find 命令的高级技术
2008-09-16 17:16 2599本文介绍如何使用 find 命令浏览 UNIX® 文件系统中丰 ... -
CVS做版本管理项目的目录结构
2008-09-15 09:54 1723目录结构是:/home/cvsroot ... -
Tomcat OutOfMemory Error: PermGen Space
2008-08-30 13:33 1658This FAQ applies to: 5.1 Using ... -
使用Apache 反向代理功能连接 Tomcat
2008-08-24 23:04 6049Apache HTTP server 和 Tomc ... -
Windows与Vmware下的Linux文件共享方式总结
2008-08-03 11:18 13271.利用Samba 这是我用得最多的方式 2.在Linux下 ... -
中文编码转Unicode
2008-08-03 11:16 2527格式 native2ascii 所要转码文件 转码后文 ... -
Java 编程技术中汉字问题的分析及解决
2008-08-03 11:15 1256Java 编程技术中汉字问题的分析及解决 ... -
EasyJWeb
2008-08-03 11:14 1054EasyJWeb是基于java技术,应用于WEB应用程 ... -
eclipse中中文乱码解决
2008-08-03 11:13 2271可依次选择"window">> ... -
JBoss启动时无法转换DailyRollingFileAppender类的解决办法
2008-08-03 11:12 2367错误现象: 12:49:46,251 INFO [STDO ... -
struts1.2 显示多维数组
2008-08-03 11:09 1188jsp page: <logic:iterate na ... -
软件需求分析规格说明书
2008-08-03 11:09 3284中华人民共和国国家标 ... -
[转] MYSQL导入导出常用命令
2008-08-03 11:08 1015一、备份数据库:(命令在DOS的mysql\bin目录下执行) ... -
产生Hibernate数据库表映射文件的方法
2008-08-03 11:00 14641。根据powerdesigner的cdm文件生成 hiber ... -
用Eclipse、Tomcat、Lomboz搭建jsp开发环境
2008-08-03 10:59 23191.安装jdk1.4.0+,安装Tomca ... -
POJO 与 PO的 概念
2008-08-03 10:58 859POJO = pure old java object or ... -
spring入门编程问题集锦
2008-08-03 10:54 1245spring入门编程问题集锦 1、如何学习Spring? ... -
nohup命令
2008-08-03 10:53 2182nohup 命令 用途 不挂断 ... -
板载RAID在安装OS时都需添加驱动,否则认不出硬盘。
2008-08-03 10:52 13901、 PermGen space的全称是Permanent ... -
RAID问题集锦
2008-08-03 10:52 1014板载RAID在安装OS时都需添加驱动,否则认不出硬盘。WIN2 ...
相关推荐
### 诊断Java代码:轻松掌握Java泛型(一) #### 数据类型转换和错误 在Java开发过程中,数据类型转换是一项常见的需求,尤其是在处理诸如`Object`等基础类型的对象时。当开发者希望对某个对象执行某种特定操作...
对java泛型以及反射机制进行原理和应用上的讲解,帮助初学者对这两个概念进行更轻松的掌握
JAVA泛型与集合框架知识点总结 JAVA泛型是JDK1.5中引入的一种机制,主要目的是可以建立具有类型安全的集合...Java泛型和集合框架是Java语言的重要组成部分,掌握它们可以使得开发者更好地开发高效、可靠的应用程序。
Java泛型的基本语法非常直观。例如,在定义一个泛型类时,我们可以在类名后面加上尖括号`<>`,并在尖括号内指定类型参数。这里的类型参数可以被视为一种占位符,表示将来使用这个类时将由具体类型替换的位置。例如:...
Java泛型是Java编程语言中的一个关键特性,它允许程序员在定义类、接口和方法时指定...通过理解和应用VarJ,开发者能够更好地掌握Java泛型的使用,减少因类型推断不准确带来的问题,同时提升代码的可维护性和一致性。
### 泛型DAO层在SSH框架中的应用与详解 #### 引言 在现代软件开发中,特别是基于Java的企业级应用开发中,...因此,对于那些追求高质量、高效率的Java企业级应用项目来说,掌握并应用泛型DAO层技术是非常有必要的。
本教程《轻松学Java》旨在帮助初学者快速掌握Java编程的基础知识,并逐步提升至精通水平。 首先,Java编程的基础包括了解基本语法和数据类型。Java支持八种基本数据类型:整型(byte、short、int、long)、浮点型...
"Java轻松掌握(PDG)"很可能是一个Java学习资源,可能是电子书或者课程资料,其中包含了多个章节或部分,以PDG(可能代表Page Data Generator或某种特定的文件格式)文件呈现。 1. **基础概念**:在Java中,一切皆为...
"新手轻松自学JAVA教程.zip" 是一个专门为初学者设计的资源包,旨在帮助那些对编程感兴趣但又缺乏经验的人快速掌握Java语言的基本概念和核心技能。 本教程可能包含了一系列的章节,从最基础的编程概念开始,逐步...
本文将深入探讨如何通过正确的资源和高效的学习方法,在较短的时间内轻松掌握Java,并以此为契机获得理想的高薪工作。 #### Java基础知识与核心概念 Java是一种面向对象的编程语言,拥有自动内存管理机制,这使得...
"Head First Java" 是一本以独特、直观的方式讲解Java的书籍,它通过生动的故事和丰富的视觉元素来吸引读者,使初学者能够更容易地理解和掌握Java的基础概念。书中涵盖了面向对象编程的基本原理,如类、对象、封装、...
MapReduce是一种分布式计算模型,由Google在2004年提出,主要用于处理和生成大规模数据集。它将复杂的并行计算任务分解为两个主要阶段:Map(映射)和...了解和掌握这些概念对于理解现代分布式系统和Java编程至关重要。
这本书以其独特的教学方式,通过丰富的图像、幽默的插图和互动性的设计,帮助读者以轻松有趣的方式掌握Java编程的核心概念。 在Java的世界里,初学者通常会遇到诸如类、对象、继承、多态、接口等基础概念。《Head ...
- 讲解了单元测试的概念以及如何在Java开发中使用Junit框架来提高代码质量和可靠性。 3. **Java新特性**: - 静态导入和自动装箱拆箱:介绍了Java 5中引入的静态导入功能以及自动装箱和拆箱的概念。 4. **增强...
本书以图解的方式进行讲解,通过大量的实例和图表,使读者能够轻松理解和掌握Java编程的基础知识和技能。 知识点: 1. Java编程基础知识:变量、数据类型、控制流语句、函数、数组、链表、栈、队列、树等。 2. ...
理解如何定义和使用类,以及如何通过继承和多态性来实现代码复用,是掌握Java的关键。同时,接口在Java中也扮演着重要角色,它提供了实现多继承的方式,并允许定义抽象方法,是实现设计模式的基础。 在Java中,异常...
这本书以其独特的教学方式,将复杂的编程概念以直观、生动的方式呈现,使得读者能够轻松理解和掌握Java语言的核心概念。 在深入浅出的讲解中,本书涵盖了Java编程的基础知识,包括: 1. **Java简介**:首先介绍...
本书采用轻松愉快的教学方式,寓教于乐,让读者能够在愉悦的阅读过程中掌握Java编程知识,从而达到学习的目的。这本书不但适合编程新手,也适合希望加深对Java理解的读者。 书中首先介绍了Java语言的基础知识,包括...
《Java2轻松进阶》是一本专为Java初学者和有一定...通过学习和实践书中内容,读者将能够从初级程序员逐渐成长为熟练掌握Java2的开发者,具备解决实际问题的能力,为进一步深入学习Java EE或Android开发打下坚实基础。