我有一个公司对象,有不同的部门和员工。我已经成功序列化了我的对象并将其加载到我的程序中。
现在我想测试这两个对象在结构上是否相等。 java是否为我提供了比较这些对象的工具?
我应该补充一点,我的对象有一个填充了其他对象的列表。
或者我必须自己编写测试吗?
编辑:
class test{
public int a
}
test t = new test();
t.a = 1;
test t1 = new test();
t1.a = 1;
现在我想根据它们的值来比较t和t1。
答案 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();
}
}