用泛型设计通用方法(一)

本文深入探讨了Java中泛型的概念及其重要性,特别是在提高代码类型安全性方面的作用。通过具体示例,逐步展示了如何利用泛型改进方法设计,避免运行时错误,并确保编译时检查类型一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:java小知识,仅提供给小鸟看。PS请认真对待编译器提出警告的地方,它们往往是程序错误的导火索。有问题请发邮件:qdaolong@126.com

 

 

有时候,我们常常想设计一个方法,希望她能对任意类型进行操作。比方说,我有一个max()方法,比较2个类型相同的对象,并返回较大的对象。

我们可以采用基于Objectmax()方法实现。

这段代码完全谈不上是类型安全的。它存在2个问题

1.    返回值类型是Object。这样在使用的时候必须向下转型。

例如:比较下面2Rectangle对象

Rectangle recA = new Rectangle (4, 5);

Rectangle recB = new Rectangle (6, 2);

Rectangle recC = (Rectangle)max(recA, recB);

2.    所传递的参数必须implements Comparable<T>(请注意,这里是泛型)接口,因为在比较的时候向上使用了compareTo()方法。

在此种情况下,编译器会给出一个警告(黄色横线)。但是你可以完全忽略它。

(打开你的eclipse试试吧。在下面的控制台上还有警告信息。)

如果参数没有implements Comparable<T>接口,你依然固执的执行这段代码会得到runtime error ClassCastException.

 

JDK1.5以后引入了泛型的概念,对此我不想感谢上帝。该感谢的应该是java的开发者以及已经不存在的SUN公司。泛型的正统定义是什么,你可以自己在网上自己找。个人理解:泛型就是一种类型安全机制。打个比方,有个苹果篮子,里面只能放苹果。这样你可以设计一个过滤装置,把要往苹果蓝子里放的东西检测下。如果你放一个香蕉。过滤装置就会警告:你放的不是苹果。这样可以保证放入的都是苹果,拿出来的也都是苹果。

泛型的标记是<T>T称为类型参数(type parameter.

修改max()方法,步骤1.

 

按上面的代码进行改写下。可以修复问题1,使得我们不必再频繁的转型。但聪明的你也看到了,上面依然有个警告,这个警告还是问题2中的警告,并不能确保你的参数implements Comparable<T> 接口(你依然可以忽略这次警告,执行你的程序)。

修改max()方法,步骤2.

 

再次修改后的代码,如上所示,如果在采用问题1中给出的示例,恭喜你,如果你的Rectangle没有实现Comparable<Rectangle>接口,你将得到编译时错误,

你只能老老实实的把你要比较的类实现完整。而且因为传递的参数一定实现了Comparable<T>接口,程序才能正常运行,所以,在if()语中就没有必要进行向上转型了。

你可以用此种方式实现选择排序,交换排序,冒泡排序,顺序查找和二分查找等简单算法。(下一期会上传这些算法的代码)s。

但这还不是我们故事的结束,下一期,我们将结合OO语言三大特性之一的继承再次说明采用上面的设计会出现的一些有意思的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值