2

我有一个具有不同部门和员工的公司对象。我已成功序列化我的对象并再次将其加载到我的程序中。

现在我想测试这两个对象在结构上是否相等。java是否为我提供了比较这些对象的工具?

我应该补充一点,我的对象有一个包含其他对象的列表。

还是我必须为此编写自己的测试?

编辑:

class test{

public int a

}
test t = new test();
t.a = 1;

test t1 = new test();
t1.a = 1;

现在我想根据它们的值比较 t 和 t1 是否相同。

4

3 回答 3

5

您可以覆盖类中的equals方法,Test如下所示:

public boolean equals(Object other) {
    if (other == null) {
       return false;
    }
    if (!(other instanceof Test)) {
       return false;
    }
    return this.a == ((Test) other).a;
}

另外:当覆盖 equals 时,你也应该总是覆盖 hashCode 方法。请参阅此参考资料了解原因:Why always override hashcode() if overriding equals()?

于 2013-04-28T18:39:24.407 回答
2

听起来您可以与equals我认为的覆盖方法进行比较...

于 2013-04-28T18:32:43.160 回答
2

Google Guava 提供了比较链:

   public int compareTo(Foo that) {
     return ComparisonChain.start()
         .compare(this.aString, that.aString)
         .compare(this.anInt, that.anInt)
         .compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast())
         .result();
   }

Apache Commons 提供CompareToBuilder

   public int compareTo(Object o) {
     MyClass myClass = (MyClass) o;
     return new CompareToBuilder()
       .appendSuper(super.compareTo(o)
       .append(this.field1, myClass.field1)
       .append(this.field2, myClass.field2)
       .append(this.field3, myClass.field3)
       .toComparison();
   }
 }
于 2013-04-28T18:33:33.930 回答