Tri*_*ick 11 java findbugs compareto
我在这里一无所知......
1: private static class ForeignKeyConstraint implements Comparable<ForeignKeyConstraint> {
2: String tableName;
3: String fkFieldName;
4:
5: public int compareTo(ForeignKeyConstraint o) {
6: if (this.tableName.compareTo(o.tableName) == 0) {
7: return this.fkFieldName.compareTo(o.fkFieldName);
8: }
9: return this.tableName.compareTo(o.tableName);
10: }
11: }
Run Code Online (Sandbox Code Playgroud)
在第6行,我从FindBugs得到: Bug: net.blabla.SqlFixer$ForeignKeyConstraint defines compareTo(SqlFixer$ForeignKeyConstraint) and uses Object.equals()
我不知道如何纠正这个问题.
Pas*_*ent 15
这个错误意味着你没有覆盖equals的ForeignKeyConstraint(因而继承equals自Object),所以下面是不正确的(从javadoc中compareTo):
强烈建议,但并非严格要求
(x.compareTo(y)==0) == (x.equals(y)).一般来说,任何实现Comparable接口并且违反此条件的类都应该清楚地表明这一事实.推荐的语言是"注意:此类具有与equals不一致的自然顺序."
要修复FindBugs检查,请覆盖equals- 并且hashCode- 如果通常情况有意义(或排除对此类和文档的检查,表明您的类使用建议的注释违反了此条件).
它告诉你 compareTo() 和 equals() 有可能不一致。他们应该,真的,永远不要不同意。
equals() 方法是从 java.lang.Object 继承的,它默认检查两个对象是否是同一个实例。您的 compareTo 方法是基于 tableName 和 fkFieldName 比较对象。因此,您可能会发现自己处于一种情况,其中 compareTo 声明两个对象相同(因为 tableName 和 fkFieldName 匹配),但 equals 声明它们不同(因为它们是不同的实例)。
有一些 Java API 依赖于 compareTo 和 equals 是一致的;这是 java 语言的一部分,被认为是核心语言契约。理想情况下,实现一个 equals(和 hashcode)方法来检查基于 tableName 和 fkFieldName 的相等性。
| 归档时间: |
|
| 查看次数: |
12080 次 |
| 最近记录: |