我正在寻找Java中的通用实用程序,它可以帮助我为两个对象(相同类型)创建差异报告.
例如,如果我的类结构是:
class A {
int p1;
string p2;
B b1;
}
class B {
float p3;
}
Run Code Online (Sandbox Code Playgroud)
我想要一个报告b/w两个类型A的对象(比如a1和a2),如下所示:a1 vs. a2
p1 : 'remove'
p2 : 'change'
b1.p3: 'add'
Run Code Online (Sandbox Code Playgroud)
其中,如果属性在第二个对象中为null,则设置'remove',如果属性存在但是具有不同的值则为'change',如果第一个对象中的属性为null,则为'add'.
对于收集对象来说,它可能变得更加棘手/棘手......
SQi*_*hER 10
我为此创建了一个库:https://github.com/SQiShER/java-object-diff
它构建了比较对象的树结构,并允许您通过访问者模式遍历节点.查看" 入门"页面,查看一些示例.它适用于几乎任何类型的对象,可以处理任意数量的嵌套级别.我甚至设法基于它构建一个自动对象合并.
这种对象图的打印版本如下所示:
Property at path '/contacts/item[Walter White]/middleName' has been added => [ Hartwell ]
Property at path '/contacts/item[Jesse Pinkman]/middleName' has been added => [ Bruce ]
Run Code Online (Sandbox Code Playgroud)
我自己使用它,它就像一个魅力.希望能帮助到你!
我不知道你的对象有多复杂,但是通过反射手动完成它会很快失控.特别是当地图和收藏集涉及时.
given:
DummyUser user = dummyUser("id").withSex(FEMALE).build();
DummyUser user2 = dummyUser("id").withSex(MALE).build();
Javers javers = JaversBuilder.javers().build()
when:
Diff diff = javers.compare(user, user2)
then:
diff.changes.size() == 1
ValueChange change = diff.changes[0]
change.leftValue == FEMALE
change.rightValue == MALE
Run Code Online (Sandbox Code Playgroud)
它可以处理图形中的循环.
此外,您还可以获取任何图形对象的快照.Javers有JSON序列化器和反序列化器来快照和更改,还在mongoDB中实现了存储.
| 归档时间: |
|
| 查看次数: |
5142 次 |
| 最近记录: |