想知道列出的方法需要做些什么
public final int compareTo(final FieldDTO o) {
return o.available.compareTo(this.available);
Run Code Online (Sandbox Code Playgroud)
它在第2行
引发异常,说明不良做法 - 类定义compareTo(...)并使用Object.equals()16天字段定义compareTo(FieldDTO)并使用Object.equals()
不知道我该怎么办呢.提前致谢.
如果你定义compareTo你至少应该定义equals
boolean equals(it) {
return compareTo(it) == 0;
}
Run Code Online (Sandbox Code Playgroud)
当你把对象放在Maps和Sets中时,你会遇到奇怪的问题.通常也很好的做法是定义hashCode.
这是FindBugs的文档:
Eq:Class定义compareTo(...)并使用Object.equals()(EQ_COMPARETO_USE_OBJECT_EQUALS)
此类定义compareTo(...)方法,但从java.lang.Object继承其equals()方法.通常,当且仅当equals返回true时,compareTo的值才应返回零.如果违反了此规则,则会在诸如PriorityQueue之类的类中发生奇怪且不可预测的故障.在Java 5中,PriorityQueue.remove方法使用compareTo方法,而在Java 6中,它使用equals方法.
从Comparable接口中的compareTo方法的JavaDoc:
强烈建议,但并非严格要求(x.compareTo(y)== 0)==(x.equals(y)).一般来说,任何实现Comparable接口并且违反此条件的类都应该清楚地表明这一事实.推荐的语言是"注意:此类具有与equals不一致的自然顺序."
因此,您似乎需要实现该equals方法,从而覆盖默认实现Object.
小智 5
您需要覆盖 Object 类的 equals() 和 hashCode() 方法。使用 IDE 为这些生成的代码,它将拉取所有对象属性并为您创建方法。
在 Eclipse IDE 上:
| 归档时间: |
|
| 查看次数: |
11596 次 |
| 最近记录: |