2016-04-04 4 views
1

Использование javers 1.4.1.javers жалуется, когда поле объявлено как Collection, но инициализировано как конкретный тип

У меня есть поле в POJO объявлен как это:

private Collection<String> names; 

, а затем инициализируется с экземпляром конкретного Collection класса, как это:

names = new ArrayList<>(); 

Когда я запускать тесты против этого класса , javers жалуется на следующую ошибку:

JaversException: MANAGED_CLASS_MAPPING_ERROR given javaClass 'class java.util.ArrayList is mapped to java.util.ArrayList, expected ManagedType

Та же ошибка, если я инициализировать его рядный, как:

private Collection<String> names = new ArrayList<>(); 

С другой стороны, если я объявляю поле как List то javers счастлив:

private List<String> names; 

Я m полный новичок в javers, он был представлен проекту кем-то другим. Но все, что я сделал, это добавить новое поле к существующему POJO. Что мне нужно, чтобы посмотреть и/или настроить, чтобы сделать javers счастливым?

ответ

1

Причина в том, что JaVers должен знать (статически), если это список или набор. Без этой информации JaVers не знает, как сравнивать две коллекции. Поэтому вам нужно изменить POJO.

Это сообщение об ошибке немного вводит в заблуждение, существует проблема, что здесь https://github.com/javers/javers/issues/353

Я бы ожидать что-то вроде High-level Collection interface is not supported, try at least Set or List

+0

Это облом; Я предпочитаю объявлять поля как наиболее абстрактный тип, который имеет смысл, в этом случае это будет 'Collection'. Можно ли исправить это ограничение JaVers? –

+0

Нет, это не ошибка, так работает JaVers. JaVers использует различные алгоритмы для сравнения наборов и списков. Как ты собираешься рассказать Джаверсу, кого выбрать? –

+0

Во время выполнения не удалось ли использовать отражение для определения фактического типа? –

 Смежные вопросы

  • Нет связанных вопросов^_^