- 浏览: 1197821 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (361)
- java综合 (33)
- 项目管理 (10)
- 工作流 (6)
- spring (11)
- hibenate (17)
- struts (0)
- javascript,html,css,ajax,jquery (11)
- IDE (9)
- 生活 (0)
- 工作 (0)
- 杂记 (1)
- 数据库 (96)
- 服务器 (5)
- 可视编辑 (0)
- freemarker (6)
- 操作系统 windows (13)
- web页面 (6)
- jms (15)
- 调优 (4)
- 测试和bug管理 (2)
- 原理 (1)
- 項目-atf (17)
- 安全 (3)
- xml (4)
- 操作系统 liunx (21)
- 网络 (22)
- office (11)
- 设计 (2)
- 软件 (1)
- 数据库 mysql (6)
- 胖客户端-flex (1)
- 正则 (9)
- oracle- liunx (3)
- sql2000 (2)
- 模式 (1)
- 虚拟机 (2)
- jstl (2)
- 版本控制 打包工具 (0)
- AOP (1)
- demo (1)
- 小软件 (2)
- 感恩 (1)
- iphone 4 (1)
- 反欺诈业务经验整理 (0)
最新评论
-
sea0108:
mark
java内存模型 -
XingShiYiShi:
方便把:testPNR();具体实现发出来吗?谢谢
用正则表达式解析 航信的电子客票和pnr报文 -
wh359126613:
如果js和webservice不在同一个服务器上,有跨域问题如 ...
使用javascript调用webservice示例 -
雨飛雁舞:
...
oracle 动态性能(V$)视图 -
ouyang1224:
好东西
oracle 动态性能(V$)视图
15.3 泛型接口
泛型也可以应用于接口。例如生成器(generator),这是一种专门负责创建对象的类。实际上,这是工厂方法设计模式的一种应用。不过,当使用生成器创建新的对象时,它不需要任何参数,而工厂方法一般需要参数。也就是说,生成器无需额外的信息就知道如何创建新对象。
一般而言,一个生成器只定义一个方法,该方法用以产生新的对象。在这里,就是next()方法。我将它收录在我的标准工具类库中:
方法next()的返回类型是参数化的T。正如你所见到的,接口使用泛型与类使用泛型没什么区别。
为了演示如何实现Generator接口,我们还需要一些别的类。例如,Coffee类层次结构如下:
现在,我们可以编写一个类,实现Generator<Coffee>接口,它能够随机生成不同类型的Coffee对象:
参数化的Generator接口确保next()的返回值是参数的类型。CoffeeGenerator同时还实现了Iterable接口,所以它可以在循环语句中使用。不过,它还需要一个“末端哨兵”来判断何时停止,这正是第二个构造器的功能。
下面的类是Generator<T>接口的另一个实现,它负责生成Fibonacci数列:
虽然我们在Fibonacci类的里里外外使用的都是int类型,但是其类型参数却是Integer。这个例子引出了Java泛型的一个局限性:基本类型无法作为类型参数。不过,Java SE5具备了自动打包和自动拆包的功能,可以很方便地在基本类型和其相应的包装器类型之间进行转换。通过这个例子中Fibonacci类对int的使用,我们已经看到了这种效果。
如果还想更进一步,编写一个实现了Iterable的Fibonacci生成器。我们的一个选择是重写这个类,令其实现Iterable接口。不过,你并不是总能拥有源代码的控制权,并且,除非必须这么做,否则,我们也不愿意重写一个类。而且我们还有另一种选择,就是创建一个适配器(adapter)来实现所需的接口,我们在前面介绍过这个设计模式。
有多种方法可以实现适配器。例如,可以通过继承来创建适配器类:
如果要在循环语句中使用IterableFibonacci,必须向IterableFibonacci的构造器提供一个边界值,然后hasNext()方法才能知道何时应该返回false。
练习7:(2) 使用组合代替继承,适配Fibonacci使其成为Iterable。
练习8:(2) 模仿Coffee示例的样子,根据你喜爱的电影人物,创建一个StoryCharacters的类层次结构,将它们划分为GoodGuys和BadGuys。再按照CoffeeGenerator的形式,编写一个StoryCharacters的生成器。
<!---->发表评论
-
介绍Java GC种类,并更换 调优GC
2011-03-04 03:42 2166转载自:http://blog.csdn.net/rola ... -
Daemonthread(守护线程)的含义
2011-03-03 20:39 1943http://fruitking.iteye.com/blog ... -
smc_5_1_0小例子
2010-06-25 15:33 0smc_5_1_0小例子 -
Hessian 例子
2010-06-25 15:27 0Hessian 例子 -
java小日历带农历(转)
2010-06-20 15:55 1513http://zengming526.iteye.com/bl ... -
Annotation exmaple
2009-12-14 09:44 1112如何使用注解的小例子 -
Java6 WebService @WebService
2009-12-11 10:39 43541. 新建一个JAVA project.2. 新建一个He ... -
JNI 数据类型转换
2009-11-18 12:01 21223Java代码 #include <jni ... -
JNI 返回结构体参数
2009-11-18 11:58 8891如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jn ... -
Map 四种同步方式的性能比较
2009-11-01 21:03 2000如果需要使 Map 线程安全,大致有这么四种方法: 1、使用 ... -
ConcurrentHashMap之实现细节
2009-11-01 21:00 2841ConcurrentHashMap是Java 5中支持高并发、 ... -
Java反射经典实例
2009-09-28 16:30 2024Java提供了一套机制来动态执行方法和构造方法,以及数组操作等 ... -
servlet 线程 安全 threadlocal (基础知识了)
2009-09-15 13:05 3251关键字: j2ee servlet 线程 ... -
java toString() ReflectionToStringBuilder
2009-06-18 11:31 2119@Override public String toStrin ... -
解决JAVA服务器性能问题
2009-04-13 01:51 2861解决JAVA服务器性能问题 ... -
java内存模型
2009-04-12 23:10 5659Weblogic系统管理总结(7.1/8.0)关于JVM内存管 ... -
Java线程总结
2009-04-12 20:32 1174在论坛上面常常看到初 ... -
删除字符串中的空格或将字符串的多个空格换位单个空格
2009-04-10 15:44 2503//将字符串的多个空格换位单个空格 public static ... -
Java 中文于unicode 互转
2009-04-06 03:08 3251关键字: java unicode convert 转换 ... -
Java EE 6体系结构的变革
2009-03-27 17:54 1502又看到 Reza 同学为 Java EE 6 奔走呼告了。如同 ...
相关推荐
高级编程(第4版) [1/7] 原书名: Professional ASP.NET 2.0 原出版社: Wrox 作者:(美)Bill Evjen, Scott Hanselman, Farhan Muhammad [同作者作品] [作译者介绍] 译者: 李敏波[同译者作品] 出版社:清华...
附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 寻找瓶颈 D.2.1 安插自己的测试代码 D.2.2 JDK性能评测 D.2.3 特殊工具 D.2.4 性能评测的技巧 D.3 提速方法 D.3.1 常规手段 D.3.2 依赖语言的方法 D.3.3 特殊情况 D...
本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...
1. **多语言支持**:Visual Studio 2017企业版15.3支持包括C#、VB.NET、C++、JavaScript、TypeScript、Python、F#等在内的多种编程语言,让开发者能够在同一个环境中进行多语言项目开发,提高了开发效率。...
15.3 表达式的类型 310 15.4 精确浮点数表达式 310 15.5 表达式和运行时检查 311 15.6 计算的正常和突然结束 312 15.7 求值顺序 313 15.8 主表达式 317 15.9 类实例创建表达式 320 15.10 数组创建表达式 325 ...
Xcode集成了Swift编程语言的最新版本,Swift是一种快速、安全、互动性强的编程语言,被广泛用于iOS、iPadOS、macOS、watchOS和tvOS应用的开发。在Xcode中,开发者可以利用Swift的强大功能,编写出高效、可维护的代码...
PowerDesigner15.3破解文件 内含官网安装包下载在地址
15.3 java.util.Arrays类 236 15.4 java.util.StringTokenizer类 238 15.5 java.util.Calendar类 240 15.6 巩固练习 242 第16章 AWT程序设计 244 16.1 java.awt.Component类 244 16.2 java.awt....
附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 寻找瓶颈 D.2.1 安插自己的测试代码 D.2.2 JDK性能评测[2] D.2.3 特殊工具 D.2.4 性能评测的技巧 D.3 提速方法 D.3.1 常规手段 D.3.2 依赖语言的方法 D.3.3 特殊...
Java聊天室是一个基于Java编程语言实现的实时通讯应用,它结合了服务器端和客户端的编程技术,以及数据库的集成来存储用户信息。这个程序的主要功能包括用户注册、登录验证、在线用户显示、发送QQ表情与文字混合的...
Struts 2.3.15.3 是一个基于 MVC(Model-View-Controller)设计模式的Java Web应用程序框架,由Apache软件基金会开发并维护。它在Java社区中广泛使用,为开发人员提供了构建可扩展、高效且易于维护的Web应用的工具。...
施耐德Control Expert 15.3 注册方法.docx 将Control Expert Classic快捷方式放置到桌面,并按下图设置兼容性,管理员权限打勾
开发者需要安装最新版的Xcode,以支持iOS 15.3的开发和调试。Xcode集成了代码编辑器、项目管理、界面设计、编译构建和真机/模拟器调试等功能,使得开发流程更加高效。在设置真机调试时,开发者需要将目标设备连接到...
学生提问:老师,我想学习Java编程,到底是学习Eclipse好呢,还是学习JBuilder好呢? 21 1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种...
在本文件中提到的"Control Expert"是施耐德电气推出的一款专业编程软件,主要用于PLC(可编程逻辑控制器)的编程、调试和维护。 "Schneider Electric Control Expert v15.3 Tools license.lic" 提及的是该软件的第...
Linux程序设计 第4版.haozip01.zip Linux程序设计 第4版.haozip02.zip 基本信息 原书名: Beginning Linux Programming 原出版社: Wrox 作者: (英)Neil Matthew Richard Stones [作译者介绍] 译者: 陈健 宋...
《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...
Linux程序设计 第4版.haozip01.zip Linux程序设计 第4版.haozip02.zip 基本信息 原书名: Beginning Linux Programming 原出版社: Wrox 作者: (英)Neil Matthew Richard Stones [作译者介绍] 译者: 陈健 宋...
《Java JDK 7学习笔记》将IDE操作纳为教学内容之一,使读者能与实践结合,提供的视频教学能更清楚地帮助读者掌握操作步骤。 内容简介 书籍 计算机书籍 《java jdk 7学习笔记》是作者多年来教学实践经验的总结...