创建一个通用方法来接受任何实体类的列表并使用apache Diff检查差异

时间:2019-02-27 08:15:17

标签: java java-8 javers

我之前创建了一个通用方法,用于使用Javers框架查找差异。然后,我不得不将其更改为Apache Diff。 以下代码是实际代码的简化版本。

 public static <E> List<AuditsResource> findDemographicsChanges(List<E> entityAudit) {
    List<AuditsResource> results = new ArrayList<>();

    for (int i = 0; i < entityAudit.size() - 1; i++) {
        DiffResult diff = entityAudit.get(i).diff(entityAudit.get(i+1)); //Not working
        List<Diff<?>> d = diff.getDiffs();
        final Integer innerI = new Integer(i);
        results.addAll(d.stream()
                .map(j -> new AuditsResource(j)
                .collect(Collectors.toList()));
    }

该设计对于Javers框架运行良好,我可以得到如下差异

Javers javers = JaversBuilder.javers().build();
        Diff diff = javers.compare(inputArray.get(i), inputArray.get(i + 1));

由于Apache Diff需要一个实体类来实现“ Diffable”并按如下方式覆盖diff函数

@Override
public DiffResult diff(Entity obj) {
}

因此,我无法在第一段代码中调用diff()

DiffResult diff = entityAudit.get(i).diff(entityAudit.get(i+1)); //Not working

因为这需要我在接收通用对象而不是Entity对象的实体内部编写通用函数。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

声明您的功能为

public static <E extends Diffable> List<AuditsResource> findDemographicsChanges(List<E> entityAudit)