Javers:即使未更改,也会显示列表更改

时间:2018-05-02 17:07:40

标签: java object comparison javers

您正在比较具有如下结构的两个对象(使用Javers 3.9.4): MyClass有一堆字段,其中一些是带有列表的对象。 列表对象确实显示更改,即使它们在对象的两个实例中都相同

Class MyClass{
String s1;
Services services;
}
Class Services{
ServiceS1 serviceS1;
ServiceS2 services2;
}

Class ServiceS1{
String id;
List devicesS1List;
}

Class ServiceS1Devices{
String id;
String name;
Date date;
}

I create objects like this

ServiceS1Devices sd1 = new ServiceS1Devices("1", "d1", 1-2);
ServiceS1Devices sd2 = new ServiceS1Devices("2", "d2", 1-2);
List devicesS1List = new ArrayList<>();
devicesS1List.add(sd1);
devicesS1List.add(sd1);
ServiceS1 serviceS1 = new ServiceS1();
serviceS1.setId("ss1");
serviceS1.setDevicesS1List(devicesS1List);
Services services = new Services();
services.setServiceS1(serviceS1);
.... services.setServiceS2(serviceS2);
MyClass obj1 = new MyClass();
obj1.setS1("1");
obj1.setServices(services);

Create a exactly similar object with only one change like below:
MyClass obj2 = new MyClass();
obj2.setS1("2");

Everything else is same, the Services etc

Then I do a compare
Javers javers = JaversBuilder.javers()
.withListCompareAlgorithm(LEVENSHTEIN_DISTANCE)
.build();
Diff diff = javers.compare(obj1, obj2);

It gives me following output:

changes - ListChange:3 ValueChange:1

值变化1是预期的,为什么它也显示为List也发生了变化(在这种情况下不是预期的)?

谢谢!

1 个答案:

答案 0 :(得分:0)

你不应该使用裸List。从Java 1.6开始就不鼓励了 - JaVers不知道里面是什么以及如何比较它。 始终使用正确参数化的泛型,例如:List<Something>

相关问题