`

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 [同作者作品] [作译者介绍] 译者: 李敏波[同译者作品] 出版社:清华...

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

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

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

    Visual Studio 2017企业版15.3

    1. **多语言支持**:Visual Studio 2017企业版15.3支持包括C#、VB.NET、C++、JavaScript、TypeScript、Python、F#等在内的多种编程语言,让开发者能够在同一个环境中进行多语言项目开发,提高了开发效率。...

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

    iOS 15.3 Xcode 开发包

    Xcode集成了Swift编程语言的最新版本,Swift是一种快速、安全、互动性强的编程语言,被广泛用于iOS、iPadOS、macOS、watchOS和tvOS应用的开发。在Xcode中,开发者可以利用Swift的强大功能,编写出高效、可维护的代码...

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

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

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

    java聊天室

    Java聊天室是一个基于Java编程语言实现的实时通讯应用,它结合了服务器端和客户端的编程技术,以及数据库的集成来存储用户信息。这个程序的主要功能包括用户注册、登录验证、在线用户显示、发送QQ表情与文字混合的...

    struts-2.3.15.3源码

    Struts 2.3.15.3 是一个基于 MVC(Model-View-Controller)设计模式的Java Web应用程序框架,由Apache软件基金会开发并维护。它在Java社区中广泛使用,为开发人员提供了构建可扩展、高效且易于维护的Web应用的工具。...

    施耐德Control Expert 15.3 注册方法.docx

    施耐德Control Expert 15.3 注册方法.docx 将Control Expert Classic快捷方式放置到桌面,并按下图设置兼容性,管理员权限打勾

    iOS 15.3 真机调试包

    开发者需要安装最新版的Xcode,以支持iOS 15.3的开发和调试。Xcode集成了代码编辑器、项目管理、界面设计、编译构建和真机/模拟器调试等功能,使得开发流程更加高效。在设置真机调试时,开发者需要将目标设备连接到...

    疯狂JAVA讲义

    学生提问:老师,我想学习Java编程,到底是学习Eclipse好呢,还是学习JBuilder好呢? 21 1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种...

    施耐德Schneider Electric Control Expert v15.3 Tools license.lic

    在本文件中提到的"Control Expert"是施耐德电气推出的一款专业编程软件,主要用于PLC(可编程逻辑控制器)的编程、调试和维护。 "Schneider Electric Control Expert v15.3 Tools license.lic" 提及的是该软件的第...

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

    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学习笔记》是作者多年来教学实践经验的总结...

Global site tag (gtag.js) - Google Analytics