Ранее я создал общий метод для поиска различий с помощью фреймворка 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
Поскольку от меня требуется написать обобщенную функцию внутри сущности, которая получает универсальный объект вместо объекта сущности.
Как мне этого добиться?