java - 检查 Java 对象是否已被修改

标签 java xml xstream

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

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

请考虑我在我的应用程序中不使用数据库,所以我对使用 hibernate 之类的解决方案不感兴趣。

最佳答案

两种方法:

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

关于java - 检查 Java 对象是否已被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578017/

相关文章:

java - 如何使用 JUNG 在给定坐标中绘制节点

java - Android 在 Activity 启动时请求摄像头权限

xml - 如何使用 xPath 从命名空间的 xml 中检索特定元素

c# - 如何在 TreeView 中快速显示大型 XML 文件(>21MB)

java - 读取存储在 Arraylist 中的文件数据

java - Jooq 数组作为集合

xml - 解析 XML 命名空间节点

java - 如何使用serialize Collections.synchronizedList和co

xstream - Xstream 中的继承问题

java - 将 XML 反序列化为对象