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。

猜你喜欢

转载自blog.csdn.net/hefrankeleyn/article/details/86523049