我有一个接口和两个实现该接口的对象,大大简化了;
public interface MyInterface {
public int getId();
public int getName();
...
}
public class A implements MyInterface {
...
}
public class B implements MyInterface {
...
}
Run Code Online (Sandbox Code Playgroud)
我们正在从使用一种实现迁移到另一种实现,但我需要检查生成的类型 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.
Run Code Online (Sandbox Code Playgroud)
我在这里寻找良好的编码实践和风格。我很感激我可以迭代一个键集,取出两个应该等效的对象,然后调用所有方法并进行比较,我只是想可能有一种更干净、更可扩展的方法,我有兴趣学习可能有什么选择。
覆盖 equals 或实现 Comparable 是否合适/可能/建议?
提前致谢,
加文
我将在测试类中实现自定义版本equals,而不是在任何这些实现类中(因为它会与常规equals合同发生冲突)。就像是:
boolean equals(A a, B b) ...
Run Code Online (Sandbox Code Playgroud)
据我了解,只有在迁移期间才需要进行此检查,因此equals每个实现的正常方法不应受此影响。也就是说,A.equals应该只返回true的相等实例A,并且应该始终返回false的实例B。反之亦然。
迁移结束后,您不再需要 A 类,也不再需要测试器类,并且可以继续使用 B 类,而无需触及其实现。
请注意, if MyInterface(or Aand B) extends ,您还应该测试和Comparable中的实现是否等效。AB
(你肯定知道,如果你实现了,equals你也必须实现hashCode。)