Создание универсального метода, который принимает список любого класса сущности и проверяет разницу, используя apache Diff - PullRequest
0 голосов
/ 27 февраля 2019

Ранее я создал общий метод для поиска различий с помощью фреймворка 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

Поскольку от меня требуется написать обобщенную функцию внутри сущности, которая получает универсальный объект вместо объекта сущности.

Как мне этого добиться?

1 Ответ

0 голосов
/ 27 февраля 2019

Объявите вашу функцию как

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