检查是否已修改Java对象

时间:2014-03-22 13:06:57

标签: java xml xstream

我想使用干净/自动的方式来检查Java对象是否已被修改 我的具体问题如下:

在我的Java应用程序中,我使用XStream库将XML反序列化为Java对象,然后用户可以修改或更改它们。我想知道一种检查内存中的这些对象是否与序列化对象不同的方法,因此我可以通知用户并询问他是否要保存更改(即使用XStream进行序列化)。 在我的应用程序中有很多对象,而且非常复杂。

请考虑我在我的应用程序中不使用数据库,因此我对使用hibernate等解决方案不感兴趣。

2 个答案:

答案 0 :(得分:1)

您可以在此对象中存储版本字段,每当对象更改它应更新其版本字段(增加它)时,您可以将版本字段与序列化对象版本字段进行比较

答案 1 :(得分:1)

两种方法:

  • 为对象实现哈希码,并将内存中对象的哈希码与序列化对象的哈希码进行比较,以查看它们是否已被更改。这对您的类设计影响很小,但随着对象数量的增加,性能将下降为O(n ^ 2)。请注意,两个对象可能返回相同的哈希码,但良好的哈希实现将使这种情况不太可能发生。如果您对此感到担心,请实施并使用您自己的equals()方法。
  • 让你的对象实现Observer pattern并让每个setter方法或任何其他修改对象的方法在被调用时通知观察者。对于大量对象,性能会更好(只要它们不会不断变化),但它要求您将Observer代码引入可能的轻量级类中。 Java提供了utility interface for Observable,但您仍然需要完成大部分工作。