Java核心技术卷I:基础知识(原书第8版):12.3 泛型方法

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

铁文整理

12.3 泛型方法

    前面已经介绍了如何定义一个泛型类,实际上,还可以定义一个带有类型参数的简单方法。

    public static <T> T getMiddle(T[] a) {

        return a[a.length / 2];

    }

    这个方法是在普通类中定义的,而不是在泛型类中定义的。然而,这是一个泛型方法,可以从尖括号和类型变量看出这一点。注意,类型变量放在修饰符(这里是public static的后面,返回类型的前面

    泛型方法可以定义在普通类中,也可以定义在泛型类中。

    调用一个泛型方法时,在方法名前的尖括号中放入具体的类型

        String[] names = { "John", "Q.", "Public" };

        String middle = ArrayAlg.<String> getMiddle(names);

    在这种情况(实际也是大多数情况)下,方法调用中可以省略<String>类型参数。编译器有足够的信息能够推断出所调用的方法。它用name的类型(即String[])与泛型类型T[]进行匹配并推断出T一定是String。也就是说,可以调用

        String middle = ArrayAlg.getMiddle(names);

    在大多数情况下,对于泛型方法的类型引用没有问题。偶尔,编译器也会提示错误,此时需要解译错误报告。看一看下面这个示例:

        double middle = ArrayAlg.getMiddle(3.14, 1729, 0);

    错误消息是“foudn: java.lang.Number&java.lang.Comparable<? extends java.lang.Number&java.lang.Compable<?>>, required:double”。在本章稍后将学习如何解译“found”类型的声明。简单地说,编译器将会自动打包参数为1Double2Integer对象,而后寻找这些类的共同超类型。事实上,找到2个这样的超类型:NumberComparable接口,其本身也是一个泛型类型。在这种情况下,可以采取的补救措施是将所有的参数写为double值。

    提示:如果想知道编译器对一个泛型方法调用最终推断出哪种类型,Peter von der Ah e推荐了这样一个窍门:有目的地引入一个错误,并研究所产生的错误消息。例如,看一下调用ArrayAlg.getMiddle("Hello", 0, null)。将结果赋给JButton,这不可能是正确的。将会得到一个错误报告“found:java.lang.Object&java.io.Serializable&java.lang.Compable<? extends java.lang.Object&java.io.Serializable&java.lang.Comparable<?>>.”大致的意思是:可以将结果赋给ObjectSerializableComparable

    C++注释:在C++中将类型参数放在方法名后由,有可能会导致语法分析的歧义。例如,g(f<a, b>(c))可以理解为“用f<a, b>(c)的结果调用g”或者理解为“用两个布尔值f<ab>(c) 调用g”。


Java核心技术Ⅰ(原书12)》第十二章并发 Java核心技术Ⅰ(原书12)》第十二章并发个人笔记,记录了较为其中较为常用的API和知识点 阅读详情

相关推荐

[学习笔记] Java核心技术 一:基础知识 程序设计(五)

Java SE 7及以后的本中, 构造函数中可以省略: ArrayList&lt;String&gt; files = new ArrayListoO; 在 Java 库中, 使用变量 E 表示集合的元素类, K 和 V 分别表示表的关键字与值的类。 T ( 需要时还可以用临近的字母 U 和 S ) 表示“ 任意类”。 方法可以定义在普通类中,也可以定义在类中。...

尘埃zza的博客 503

2015 7 7 Java核心技术一 第12程序设计

12程序设计 使用机制编写的程序代码要比那些杂乱地使用Object变量,然后再进行强制转换的代码具有更好的安全性和可读性。对于集合类尤其有用,例如,ArrayList就是一个无处不在的集合类。 12.1 为什么要使用程序设计 程序设计 意味着 编写的代码可以被很多不同类的对象所重用。例如,我们并不希望为聚集String类的对象和 File对象分别设

Tomsheng321的专栏 791

JAVA Class.getMethod()方法的大O开销

翻译自 Big O Cost of Class.getMethod() 摘要: 本文主要阐述为什么在Java反射中,getMethod()方法在最优情况下是O(n),而不是O(1)的。 当我们使用Class.getMethod(name, parameterTypes),它在内部会线性的扫描一个publicMethods数组,这个数组是没有经过排序的,请在经过测试,这个数组每次存储顺序都可能不...

Myse1f的博客 2313

JAVA核心技术一,例子

JAVA

杨鑫newlife的专栏 1478

【笔记】《Java核心技术(第十)》1-第8章-程序设计

8程序设计 致使 Java SE 5.0 中增加机制的主要原因是为了满足在 1999 年制定的最早的 Java 规范需求之一(JSR 14 )。专家组花费了 5 年左右的时间用来定义规范和测试实现。 至少在表面上看来, 很像 C++ 中的模板。与 java—样,在 C++ 中, 模板也是最先被添加到语言中支持强类集合的。但是, 多年之后人们发现模板还有其他的用武之地。学习完本章...

ZeromaXHe的博客 460

Java核心技术·I(原书12

他是《Java核心技术》两本的作者,也是《重要的,第二(Addison-Wesley,2018)的Core Java SE 9和《重要的,第二(Addison-Wesley,2017)的作者。读者应在充分理解Java语言和Java类库的基础上,灵活应用Java提供的高级特性,包括面向对象编程、反射和代理、接口和内部类、异常处理、编程、集合框架、事件监听器模、图形用户界面设计和并发。☉第四章介绍了面向对象的两大基石——封装的重要概念,以及Java语言实现封装的机制——类和方法

jascl的博客 1万+

Java核心技术 I 基础知识原书第10)》:Java编程的必备宝典

Java核心技术 I 基础知识原书第10)》:Java编程的必备宝典 【下载地址】Java核心技术原书第10中文下载 Java核心技术原书第10中文下载 项目地址: https://gitcode.com/open...

gitblog_09750的博客 763

2025/03/23 ​《Java核心技术·I(原书第11)》Java核心技术·II(原书第11):高级特性》凯·S.霍斯特曼(Cay S. Horstmann)书籍阅读

2025/03/23 ​《Java核心技术·I(原书第11)》Java核心技术·II(原书第11):高级特性》凯·S.霍斯特曼(Cay S. Horstmann)书籍阅读

weixin_45428910的博客 1522

Java编程的终极导航:《Java核心技术》系列全面解读

在编程世界中,Java的位置无可替代,无论是企业级应用、移动应用开发,还是大数据处理,Java都扮演着重要的角色。对于刚刚踏入这个领域的新手来说,有一条清晰的路线图是非常必要的;而对于经验丰富的开发者而言,及时更新知识库、了解新技术同样重要。这时,`《Java核心技术 I:开发基础(原书12)》`与`《Java核心技术 II:高级特性(原书12)》`便是你的灯塔,为你的Java学习之旅指引方向

hacker707的博客 2万+

【社区图书馆】读《Java核心技术 I》有感

近期二刷了《Java核心技术 I》,于是写个二刷读后感分享给入门Java的小伙伴,辅助学习。

**My Coding Family** 1028

Java核心技术I》篇笔记() 底层原理——擦除

写在最前:本笔记全程参考《Java核心技术I》,添加了一些个人的思考和整理 底层原理 虚拟机没有对象,所有对象都将转换为普通类。   1.擦除 定义一个时会自动提供一个原始类(raw type),它的名字就是去掉类参数之后的名。类变量会被擦除,并替换为其限定类(或者,对于无限定的变量替换为Object) 例如,Pair<T>的原代码如下: public class Pair<T> { private T first; p.

mrhanzhou5273的博客 1214

Java核心技术· I》知识点精粹总结

这本书适合有一定编程基础(不一定是Java)的学习者,也适合想要巩固和深化Java基础的开发者。它覆盖了Java SE(标准)的核心特性,是学习后续高级框架(如Spring)的坚实地基。对于读过的人,它可以作为一个优秀的知识点回顾清单,帮你查漏补缺。我的总结将按照书中知识点的递进顺序,从基础到进阶,为你清晰地梳理出整个知识体系。这是本书的核心和精华所在,深入讲解了Java的OOP思想。这本书被誉为Java领域的“圣经”之一,它的特点是。这部分是Java的入门,涵盖了最基本的语法和概念。

千里之外的专栏 1246

Java核心技术I》篇笔记() 的基本使用

写在最前:本笔记全程参考《Java核心技术I》,添加了一些个人的思考和整理 概述 1. 为什么要使用 程序设计(generic programming)意味着编写的代码可以对多种不同类的对象重用。 在还没有之前,程序设计是通过继承实现的,例如ArrayList只维护一个Object[]引用的数组。这样存在两个问题:获取值时需要强转,且可以存入任意值 提供了类参数(type parameter)用于指定类,解决了上述的问题。它会让你的程序更加易读、安全 的作用是:用户想.

mrhanzhou5273的博客 446

Java基础

目录:前言一.的理解和好处1.的理解(1) 使用传统方法的问题分析(2) 使用方式2.的好处二.介绍1.什么是2.的语法3.使用细节三.自定义1.自定义类2.自定义接口3.自定义方法.通配符1.继承性2.通配符 前言 最近在回顾JavaSE部分的知识,对一些薄弱的知识进行记录,学习方式,通过视频和图书的进行学习,视频看B站韩顺平老师的30天学会Java,图书看Java核心技术 I 基础知识原书第10)。 韩顺平30天学会地址:Javahttps

孤夜的博客 1791

java核心技术 1 基础知识 原书8

1995年底,Java语言在Internet舞台一亮相便名声大噪。其原因在于它将有望成为连接用户 与信息的万能胶,而不论这些信息来自于Web服务器、数据库、信息提供商,还是任何其他渠 道。事实上,就发展前景而言,Java的地位是独一无二的。它是一种完全可信赖的程序设计语 言,得到了除微软之外的所有厂家的认可。其固有的可靠性与安全性不仅令Java程序员放心, 也令使用Java程序的用户放心。Java...

qq_27934465的博客 579

Java核心技术I (11)第二章学习

Java核心技术I 学习笔记

Tiramsu001的博客 1986

Java核心技术 1 基础知识

网站 更多书籍点击进入>> CiCi岛 下载 电子仅供预览及学习交流使用,下载后请24小时内删除,支持正,喜欢的请购买正书籍 电子书下载(皮皮云盘-点击“普通下载”) 购买正 封页 编辑推荐 Java领域*有影响力和价值的著作之一,与《Java编程思想》齐名,10余年全球畅销不衰,广受好评   根据Java SE 8全面更新,系统全面讲解Java语言的核心概念、语法...

CiCi岛的专栏 2万+

Java 核心技术 I 基础知识8程序设计

8.1 为什么要使用程序设计 8.1.1 类参数的好处 8.1.2 谁想成为程序员 8.2 定义简单类 package pair1; /** * @version 1.00 2004-05-10 * @author Cay Horstmann */ public class Pair<T> { private T first; privat...

dldldl1994的博客 449

Java核心技术之什么是

没看过官网,不知道类擦除会产生的问题还敢说自己了解

小明的Java问道之路 4696
上一篇: Java核心技术卷I:基础知识(原书第8版):12.5 泛型代码和虚拟机
下一篇: Java核心技术卷I:基础知识(原书第8版):12.6 约束与局限性
铁文
博客等级 码龄22年 441粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值