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

太棒了,这对我来说很有意义,我将编写代码作为测试,并将实现排除在等式之外。您是对的,此代码仅在迁移期间使用。