首页 > 解决方案 > 保存正在使用的对象的“状态”,以供进一步比较(无序列化)

问题描述

    GenericObject MyObj = new GenericObject();

    MyObjs.add(); // operation 1

    // operation for saving the current state of "MyObj"

    MyObjs.add(); // operation 2 (it is the same as 1, repeated)

    // Comparison with previous saved state of "MyObj" -> this will return **false**

    MyObjs.remove(); // operation 3 (this operation cancel the effect of operation 2)

    // Comparison with previous saved state of "MyObj" -> this will return **true**

我会保存一个对象的“状态”,当我以某种方式存储它的状态以及使用它来比较对象的未来状态之后,变量是如何变化的。

使用序列化,我可以在每次对象时序列化,而不是反序列化和比较,但我不能使用序列化。标准库怎么可能?

标签: javaobjectcomparecomparisonstate

解决方案


您可以使用 Jackson-JSON 库以 json 格式转储对象的状态,而无需在类中实现序列化接口,然后通过读取该 json 数据并映射回对象类型来再次加载对象。

只需为此目的使用 ObjectMapper。

例子:

//do some stuff here with your MyObj object

ObjectMapper mapper = new ObjectMapper();
String jsonState1 = mapper.writeValueAsString(MyObj);

//do some stuff here

String jsonState2 = mapper.writeValueAsString(MyObj);

当你想比较它们中的任何一个时,你可以这样做:

GenericObject objState1 = mapper.readValue(jsonState1, GenericObject.class);

然后做任何你想做的比较。

希望有帮助!!

更新

如果您只想使用标准 Java 库,那么您别无选择,只能使用 Java Reflection API。使用此 API,您可以访问类变量及其 getter 和 setter 方法,实际上是类拥有的所有内容。但不幸的是,您需要编写一大堆代码才能做到这一点。但如果您不想使用 Java 序列化,这是唯一的选择。


推荐阅读