#java #generics #javers
#java #дженерики #javers
Вопрос:
Что можно сделать, чтобы javers обрабатывали типы токенов как объекты значений и сравнивали такие объекты по свойству? Похоже, что ValueChangeAppender используется для сравнения таких объектов и в конечном итоге делегирует сравнение Objects.equals , что в случае, если equal не реализован, приводит к нежелательному результату.
Чтобы немного прояснить ситуацию, я бы хотел, чтобы javers удовлетворял приведенному ниже утверждению:
public static void main(String[] args) {
Javers javers = JaversBuilder.javers().build();
Ob<Field> o1 = new Ob<>(new Field("A"));
Ob<Field> o2 = new Ob<>(new Field("A"));
Diff diff = javers.compare(o1, o2);
assertThat(diff.hasChanges(), is(false));
}
public static class Ob<T> {
private final T field;
public Ob(T field) {
this.field = field;
}
}
public static class Field {
private final String something;
public Field(String something) {
this.something = something;
}
}
Есть идеи, как мне подойти к такому сценарию? Способен ли javers удовлетворить приведенное выше утверждение?
Ответ №1:
Тип токена может быть любым, во время выполнения это не что Object.class
иное, как, если вы можете предложить лучшую стратегию для сравнения двух экземпляров Object.class (лучше, чем вызывать Object.equals()) пожалуйста, поделитесь.
Комментарии:
1. Спасибо за ответ, не уверен, что это лучше, но в моем случае это подходило бы, если бы объекты сравнивались свойство за свойством посредством отражения. Я использую JaVers, чтобы смягчить тот факт, что классы, которые я проверяю на равенство, не реализуют equals , в этом весь смысл. Таким образом, стратегия по умолчанию здесь, которая предполагает, что реализовано equals, не очень хорошо работает для меня. Возможно, мы могли бы выбрать стратегию при настройке JaVers. Я выбрал JaVers для модульного тестирования, но, возможно, есть лучшие библиотеки для обеспечения пользовательского равенства, такие как Unitils, с его отражающими equals .