- 浏览: 1180312 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 2113转载自:http://blog.csdn.net/rola ... -
Daemonthread(守护线程)的含义
2011-03-03 20:39 1900http://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 1469http://zengming526.iteye.com/bl ... -
Annotation exmaple
2009-12-14 09:44 1057如何使用注解的小例子 -
Java6 WebService @WebService
2009-12-11 10:39 43091. 新建一个JAVA project.2. 新建一个He ... -
JNI 数据类型转换
2009-11-18 12:01 21168Java代码 #include <jni ... -
JNI 返回结构体参数
2009-11-18 11:58 8834如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jn ... -
Map 四种同步方式的性能比较
2009-11-01 21:03 1914如果需要使 Map 线程安全,大致有这么四种方法: 1、使用 ... -
ConcurrentHashMap之实现细节
2009-11-01 21:00 2796ConcurrentHashMap是Java 5中支持高并发、 ... -
Java反射经典实例
2009-09-28 16:30 1972Java提供了一套机制来动态执行方法和构造方法,以及数组操作等 ... -
servlet 线程 安全 threadlocal (基础知识了)
2009-09-15 13:05 3211关键字: j2ee servlet 线程 ... -
java toString() ReflectionToStringBuilder
2009-06-18 11:31 2071@Override public String toStrin ... -
解决JAVA服务器性能问题
2009-04-13 01:51 2819解决JAVA服务器性能问题 ... -
java内存模型
2009-04-12 23:10 5613Weblogic系统管理总结(7.1/8.0)关于JVM内存管 ... -
Java线程总结
2009-04-12 20:32 1132在论坛上面常常看到初 ... -
删除字符串中的空格或将字符串的多个空格换位单个空格
2009-04-10 15:44 2458//将字符串的多个空格换位单个空格 public static ... -
Java 中文于unicode 互转
2009-04-06 03:08 3209关键字: java unicode convert 转换 ... -
Java EE 6体系结构的变革
2009-03-27 17:54 1457又看到 Reza 同学为 Java EE 6 奔走呼告了。如同 ...
相关推荐
高级编程(第4版) [1/7] 原书名: Professional ASP.NET 2.0 原出版社: Wrox 作者:(美)Bill Evjen, Scott Hanselman, Farhan Muhammad [同作者作品] [作译者介绍] 译者: 李敏波[同译者作品] 出版社:清华...
本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...
附录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...
Java优化编程(第2版)通过丰富、完整、富有代表性的实例,展示了如何提升Java应用性能,并且给出了优化前与优化后的Java应用程序的性能差别,以实际的实例与数字告诉你,为什么不可以这么做,应该怎么做,深入分析...
15.3 表达式的类型 310 15.4 精确浮点数表达式 310 15.5 表达式和运行时检查 311 15.6 计算的正常和突然结束 312 15.7 求值顺序 313 15.8 主表达式 317 15.9 类实例创建表达式 320 15.10 数组创建表达式 325 ...
java框架struts-2.3.15.3 lib库,因为文件太大的缘故,源码前面已经放出。
java框架struts-2.3.15.3源码,这个本来是源码和lib库一起的,但是文件太大,我就把lib库删了,只剩源码了.后面我继续上传lib库
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 特殊...
PowerDesigner15.3破解文件 内含官网安装包下载在地址
原版文件mu_visual_studio_enterprise_2017_version_15.3_x86_x64_11100063;属于微软官方;下载前可以用这个名字搜索下就知道了
T15.3_CSS高级 java 经典教程 经典教材
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 ...
用于iOS 15.3对应的资源开发包
Linux程序设计 第4版.haozip01.zip Linux程序设计 第4版.haozip02.zip 基本信息 原书名: Beginning Linux Programming 原出版社: Wrox 作者: (英)Neil Matthew Richard Stones [作译者介绍] 译者: 陈健 宋...
《Java JDK 7学习笔记》将IDE操作纳为教学内容之一,使读者能与实践结合,提供的视频教学能更清楚地帮助读者掌握操作步骤。 内容简介 书籍 计算机书籍 《java jdk 7学习笔记》是作者多年来教学实践经验的总结...
nashorn-core-15.3.jar 一个单纯的jar 有maven的可以直接maven引用下载
iOS 15.3 真机调试包
这次连同最新版15.3一起上传,这个两个版本已经解决了试用期弹对话框和试用期过后需要许可证的问题(其他问题我还没有发现)。 ----------- 如何使用请参照原地址的描述:...