如何按字段比较两个对象?

时间:2016-08-18 09:40:12

标签: java serialization equals

我有很多类Serializable / Externalizable,不幸的是,我经常忘记在将一个新字段添加到某个类或错误拼写时{{1而不是readObject。所以我决定写一些被忽略的单元测试,并且不会被readDouble运行。这只是为了我自己的需要。它看起来像这样:

maven-surefire-plugin

但问题是如何比较所有不是@Test(enabled = false) public void testEquality(Object o){ String oPart = o.toString(); try (FileOutputStream fos = new FileOutputStream("/home/myusr/testser/" + oPart); ObjectOutputStream ous = new ObjectOutputStream(fos)) { ous.writeObject(o); } catch (FileNotFoundException | IOException e) { e.printStackTrace(); } Object oo = null; try (FileInputStream fis = new FileInputStream("/home/myusr/testser/" + oPart); ObjectInputStream ois = new ObjectInputStream(fis)) { Object oo = ois.readObject(); } catch (FileNotFoundException | IOException | ClassNotFoundException e) { e.printStackTrace(); } // Need to compare all non-transient fields of o and oo } 的字段和同名字段。我不想仅仅为了测试目的而覆盖transient方法。

有办法解决吗?也许有一些equals / commons库可以解决这个问题。

1 个答案:

答案 0 :(得分:2)

您可以使用反射来从YourClaas.class.getDeclaredFields()开始。然后,您必须过滤返回的字段,从对象中检索值并进行比较。