Java 比较实现相同接口的两个对象是否相等/等效-设计帮助
我有一个接口和两个实现该接口的对象,大大简化了Java 比较实现相同接口的两个对象是否相等/等效-设计帮助,java,Java,我有一个接口和两个实现该接口的对象,大大简化了 public interface MyInterface { public int getId(); public int getName(); ... } public class A implements MyInterface { ... } public class B implements MyInterface { ... } 我们正在从一个实现迁移到另一个实现,但我需要检查生成的类型B的对
public interface MyInterface {
public int getId();
public int getName();
...
}
public class A implements MyInterface {
...
}
public class B implements MyInterface {
...
}
我们正在从一个实现迁移到另一个实现,但我需要检查生成的类型B的对象是否与类型A的对象等效。具体来说,我的意思是,对于所有接口方法,类型A和类型B的对象将返回相同的值(我只是检查生成此对象的代码是否正确)
你会怎么做
Map<String, MyInterface> oldGeneratedObjects = getOldGeneratedObjects();
Map<String, MyInterface> newGeneratedObjects = getNewGeneratedObjects();
// TODO: Establish that for each Key the Values in the two maps return equivalent values.
Map oldGeneratedObjects=getOldGeneratedObjects();
Map newGeneratedObjects=getNewGeneratedObjects();
//TODO:确定对于每个键,两个映射中的值返回相等的值。
我在这里寻找良好的编码实践和风格。我很感激我可以迭代一个键集,拉出两个应该相等的对象,然后调用所有的方法并进行比较,我只是在想可能有一种更干净、更可扩展的方法,我很想了解可能有哪些选项
是否适当/可能/建议覆盖equals或实施Comparable
提前感谢,
Gavin我将在测试类中实现一个自定义版本的
equals
,而不是在这些实现类中(因为它会与常规的equals
契约冲突)。比如:
boolean equals(A a, B b) ...
我知道只有在迁移期间才需要进行此检查,因此每个实现的正常equals
方法不应受到此影响。也就是说,A.equals
对于A
的相等实例应仅返回true
,对于B
的实例应始终返回false
。反之亦然
一旦迁移结束,您就不再需要类A,也不再需要tester类,并且您可以继续使用类B,而无需接触它的实现
请注意,如果MyInterface
(或A
和B
)扩展了Comparable
,您还应该测试A
和B
中的实现是否等效
(您当然知道,如果您实现
equals
您还必须实现hashCode
)太棒了,这对我来说很有意义,我将编写代码作为测试,并将实现排除在等式之外。您是对的,此代码仅在迁移期间使用。