《数据结构与抽象:Java语言描述(原书第4版)》一JI1.1.2 泛型类

简介:

本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第1章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

JI1.1.2 泛型类

程序清单JI1-2展示了前一节开始讨论的类OrderedPair。该类假定我们关心对象对中对象的次序。符号在类头的标识符OrderedPair之后。在定义中,T表示两个私有数据域的数据类型、构造方法的两个参数的数据类型、方法getFirst和getSecond的返回类型,以及方法changeOrder中局部变量temp的数据类型。
程序清单JI1-2 类OrderedPair
image
image

注:在类Ordered Pair的定义中,T是泛型参数,
跟在类头的标识符name之后。

没有跟在类定义中的构造方法名的后面。
T(不是)可以是数据域、方法参数及局部变量的数据类型,它可以是方法的返回类型。

示例:创建OrderedPair对象。例如,为创建String对象的有序对,可以写如下的语句:

image

现在,OrderedPair定义中作为数据类型出现的T,都将使用String来替代。

程序设计技巧:在Java 7之前,前面这条Java语句都需要写两遍数据类型String,如下所示:

image

现在这个形式也是可以的。
下列语句是如何使用对象fruit的示例:
image

这些语句的输出是
image

注意,有序对fruit有OrderedPair方法changeOrder和getFirst。另外,getFirst返回的对象是String对象,它有方法length。
还要注意的是,有些是非法的。不能将不是字符串的对象对赋给对象fruit:
image

问题是,不能将OrderedPair转换为OrderedPair。但是可以创建Integer对象的对,如下所示:
image

输出不出所料是:
image

现在考虑附录B的程序清单B-1中给出的类Name。如果变量namePair具有类型OrderedPair,你就能创建使用继承派生于Name的任何类的对象对。例如,如果类FormalName派生于Name,但增加了一个头衔,如先生或女士,则namePair可以含有Name和FormalName的对象。

注:在泛型类name<class-type>的客户中,如下形式的表达式

image

创建了类的对象。从Java 7版本起,如果将这个表达式赋给一个数据类型是name的变量,则可以忽略表达式中的class-type。即可以写如下的语句:
image

类的对象的数据类型是name,不是name。

自测题1 像String或Name这样的类必须定义哪些方法才能让OrderedPair的方法toString正常工作?
自测题2 考虑程序清单JI1-2中所给出的类OrderedPair。假定我们没有使用泛型,而是忽略,将私有域的数据类型、方法参数及局部变量声明为Object而不是T。这些修改对类的使用有什么影响?

自测题3 你能使用程序清单JI1-2中定义的类OrderedPair,让两个不同及不相关的数据类型的对象配对吗?为什么?
自测题4 使用附录C的程序清单C-1中定义的类Name,写语句,将两名学生组成实验搭档。

自测题答案

  1. toString
    2.例如,本章示例中给出的语句,应该有如下的开头:

image

OrderedPair这个版本的不足是,如果是由不同的和不相关类型的对象组成的对,编译器不能提示你。所以大概会这样写
image

3.不能。类仅定义了一个泛型。
4.image

相关文章
|
7天前
|
JavaScript Java 编译器
Java包装类和泛型的知识点详解
Java包装类和泛型的知识点的深度理解
|
22天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
62 1
|
23天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
5天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
6天前
|
Java API
编码的奇迹:Java 21引入有序集合,数据结构再进化
编码的奇迹:Java 21引入有序集合,数据结构再进化
13 0
|
6天前
|
存储 监控 安全
泛型魔法:解码Java中的类型参数
泛型魔法:解码Java中的类型参数
26 0
泛型魔法:解码Java中的类型参数
|
8天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
16天前
|
Java
Java语言打印九九乘法表(详解)
Java语言打印九九乘法表(详解)
15 1
Java语言打印九九乘法表(详解)
|
22天前
|
XML 存储 算法
Java数据结构与算法-java数据结构与算法(五)
Java数据结构与算法-java数据结构与算法
47 0
|
24天前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
30 0