Javers - Пользовательский компаратор для списка generi c - GENERIC_TYPE_NOT_PARAMETRIZED - PullRequest
0 голосов
/ 30 апреля 2020

Я хотел бы сравнить обобщенный список c, который определен в абстрактном классе, в объекте, который наследуется от этого класса. Дело в том, что я хотел бы реализовать собственный компаратор для объектов этого списка.

Вот код абстрактного класса:

class A<T extends GenericT, DM extends SomeOtherGeneric>{
private List<T> genericsT = new ArrayList()<>;
private DM otherGeneric;
}

И здесь вы можете найти класс, который я сравниваю явно:

class ExtendsA extends A<ImplementationOfT, ImplementationOfOther>{
}

Я пытаюсь зарегистрировать такие компараторы. :

 javers.registerCustomType(ImplementationOfOther.class, new ImplementationOfOtherComparator()); // this one works as expected
 javers.registerCustomType(ImplementationOfA.class, new ImplementationOfAComparator()); //this one is not called 

Так что, как вы можете видеть, список genericsT не сравнивается так, как мне бы хотелось.

Вот также предупреждение, которое я получаю от javers:

09:40:26.945 [main] WARN org.javers.core.diff.appenders.CorePropertyChangeAppender - Unknown item type in 
Set property: Field ListAsSetType:List<T> genericsT , declared in A. Defaulting to Object, see 
CorePropertyChangeAppender.GENERIC_TYPE_NOT_PARAMETRIZED

Есть ли возможность добавить пользовательский компаратор для реализации ImplementationOfT, который будет сравнивать элементы списка genericsT при сравнении класса ExtendsA?

EDIT : Похоже, что я могу использовать javers.compareCollections(a.getGenericsT(), b.getGenericsT(), ImplementationOfT.class) и пометить коллекцию @DiffIgnore, но затронутый изменением Coo дает мне org.javers.core.graph.LiveGraphFactory$ListWrapper Можно ли как-то указать свое собственное имя?

...