使用反射比较不同类的对象

jau*_*udo 5 java reflection

我有两个具有完全相同属性的对象.不要问我为什么,这是生成的代码,我必须处理这个.

class Bean1 {
   int id;
}

class Bean2 {
   int id;
}
Run Code Online (Sandbox Code Playgroud)

我想比较每个类的对象而不编写每个属性的比较代码.这个线程解释了如何比较两个对象,但在我的情况下,这会失败,因为它们不是同一个类的实例.

此代码返回false:

EqualsBuilder.reflectionEquals(new Bean1(1), new Bean2(1));
Run Code Online (Sandbox Code Playgroud)

有没有其他方法来comapre对象和忽略对象类?

jau*_*udo 2

我终于能够使用 Apache Common Lang 的ReflectionToStringBuilder来做到这一点,因为它提供了ToStringStyle.NO_CLASS_NAME_STYLE选项。

此外,当我将它与 JUnit 测试一起使用时,它很有用,因为如果对象不同,我将能够看到哪个字段不同。

Assert.assertEquals(
   new ReflectionToStringBuilder(bean1, ToStringStyle.NO_CLASS_NAME_STYLE).toString(),
   new ReflectionToStringBuilder(bean2, ToStringStyle.NO_CLASS_NAME_STYLE).toString());
Run Code Online (Sandbox Code Playgroud)