Java 中compare方法与equals方法一样,在继承中会遇到问题

语言标准:对于任意的x和y值,实现必须保证sgn(x.compareTo(y)) == -sgn(y.compareTo(x))。也就是说,如果y.compareTo(x) 抛出一个异常,那么x.compareTo(x)也应该抛出一个异常。

注: “sgn”是一个数值符号:如果n是负值,sgn(n)等于-1,如果n是0,sgn(n)等于0,如果n是正值,sgn(n)等于1.

为了符合“反对称”的规则。在继承中,对于compare方法有两种情况:

如果子类之间的比较含义不一样,那就属于不同类对象的非法比较。每个compareTo方法都应该在开始时进行下面的检测:

if(getClass()! = other.getClass()) throw new ClassCastException();

如果存在一种通用算法,它能够对两个不同的子类对象进行比较,则应该在超类中提供一个compareTo方法,并将这个方法声明为final。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值