`

Java编程思想(第4版) 之 15.3 泛型接口

阅读更多

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的生成器。

<!---->
  • 大小: 5.4 KB
  • 大小: 24.7 KB
  • 大小: 5.3 KB
  • 大小: 36.2 KB
  • 大小: 18.7 KB
  • 大小: 25.6 KB
  • 大小: 2.9 KB
  • 大小: 36.2 KB
分享到:
评论

相关推荐

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    高级编程(第4版) [1/7] 原书名: Professional ASP.NET 2.0 原出版社: Wrox 作者:(美)Bill Evjen, Scott Hanselman, Farhan Muhammad [同作者作品] [作译者介绍] 译者: 李敏波[同译者作品] 出版社:清华...

    ASP.NET2.0高级编程(第4版)1/6

    本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...

    Thinking in Java 中文第四版+习题答案

    附录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优化编程(第2版)通过丰富、完整、富有代表性的实例,展示了如何提升Java应用性能,并且给出了优化前与优化后的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 ...

    struts-2.3.15.3 lib库

    java框架struts-2.3.15.3 lib库,因为文件太大的缘故,源码前面已经放出。

    struts-2.3.15.3源码

    java框架struts-2.3.15.3源码,这个本来是源码和lib库一起的,但是文件太大,我就把lib库删了,只剩源码了.后面我继续上传lib库

    java编程基础,应用与实例

    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....

    java 编程入门思考

    附录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破解文件+官网安装包下载地址

    PowerDesigner15.3破解文件 内含官网安装包下载在地址

    Visual Studio 2017企业版15.3

    原版文件mu_visual_studio_enterprise_2017_version_15.3_x86_x64_11100063;属于微软官方;下载前可以用这个名字搜索下就知道了

    T15.3_CSS高级 java 经典教程 经典教材

    T15.3_CSS高级 java 经典教程 经典教材

    Linux程序设计 第4版.haozip02

    Linux程序设计 第4版.haozip01.zip Linux程序设计 第4版.haozip02.zip 基本信息 原书名: Beginning Linux Programming 原出版社: Wrox 作者: (英)Neil Matthew Richard Stones [作译者介绍] 译者: 陈健 宋...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...

    iOS 15.3 Xcode 开发包

    用于iOS 15.3对应的资源开发包

    Linux程序设计 第4版.haozip01

    Linux程序设计 第4版.haozip01.zip Linux程序设计 第4版.haozip02.zip 基本信息 原书名: Beginning Linux Programming 原出版社: Wrox 作者: (英)Neil Matthew Richard Stones [作译者介绍] 译者: 陈健 宋...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《Java JDK 7学习笔记》将IDE操作纳为教学内容之一,使读者能与实践结合,提供的视频教学能更清楚地帮助读者掌握操作步骤。 内容简介 书籍 计算机书籍  《java jdk 7学习笔记》是作者多年来教学实践经验的总结...

    nashorn-core-15.3.jar

    nashorn-core-15.3.jar 一个单纯的jar 有maven的可以直接maven引用下载

    iOS 15.3 真机调试包

    iOS 15.3 真机调试包

    Asprise OCR 15.3 最新破解

    这次连同最新版15.3一起上传,这个两个版本已经解决了试用期弹对话框和试用期过后需要许可证的问题(其他问题我还没有发现)。 ----------- 如何使用请参照原地址的描述:...

Global site tag (gtag.js) - Google Analytics