我有两个对象,每个对象都有数十个字段:
Class1 { int firstProperty; String secondProperty; ... } Class2 { int propertyOne; String propertyTwo; ... }
尽管某些字段的名称不同,但是它们应该具有相同的含义和目的,例如firstProperty和propertyOne。我想比较两个类的对象的“相似”字段实际上是否具有相同的值。最优雅的方法是什么?
firstProperty
propertyOne
如果有两个类的字段具有相似的含义,则可以考虑声明一个interface。
interface
Class1 implements MyInterface { int firstProperty; String secondProperty; ... int getOne() { return firstProperty; } String getTwo() { return secondProperty; } } Class2 implements MyInterface { int propertyOne; String propertyTwo; ... int getOne() { return propertyOne; } String getTwo() { return propertyTwo; ... }
并且interface具有默认实现isEqualTo:
isEqualTo
MyInterface { int getOne(); String getTwo(); ... boolean isEqualTo(MyInterface that) { return that != null && this.getOne() == that.getOne() && this.getTwo().equals(that.getTwo()) && //add null checks! ...; } }
有isEqualTo被覆盖的风险-确保它永远不会发生。