compareTo()
方法和实现 java.util.Comparator.compare()
的方法中的减法。
虽然使用整数减法的结果作为 compareTo()
方法的结果是一种惯常做法,但在整数溢出的情况下,这种结构可能会导致难以捉摸的错误。
在大多数情况下,更好的做法是直接比较整数值并返回 -1
、0
或 1
。
由于四舍五入可能导致精度损失,因此也会报告直接转换为整型的浮点值减法。
在静态地确定值范围有限并且决不会发生溢出时,该检查不会进行报告。
此外,对 int
大于或等于 0
的数字执行减法决不会溢出。
因此,在这样的情况下该检查不发出警告。
总是返回零或更大值的方法可以用 javax.annotation.Nonnegative
注解进行标记,或者在该检查的选项中指定。
示例:
class DoubleHolder implements Comparable<DoubleHolder> {
double d;
public int compareTo(DoubleHolder that) {
return (int)(this.d - that.d);
}
}
这是一个无警告的示例,因为已知 String.length()
非负:
class A implements Comparable<A> {
final String s = "";
public int compareTo(A a) {
return s.length() - a.s.length();
}
}
使用这些选项列出在减法中安全使用的方法。
方法返回始终大于或等于 0
的 int
值时,表明方法就是安全的。