测试两个物体在结构上是否相等?

时间:2013-04-28 18:28:57

标签: java

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

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

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

或者我必须自己编写测试吗?

编辑:

class test{

public int a

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

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

现在我想根据它们的值来比较t和t1。

3 个答案:

答案 0 :(得分: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()?

答案 1 :(得分:2)

听起来你可以与我认为重写的equals方法进行比较......

答案 2 :(得分:2)

Google Guava提供ComparisonChain

   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();
   }
 }