Epoxy требует, чтобы каждый атрибут модели реализовывал ошибки equals и hashCode

Я создал небольшое тестовое приложение для этой проблемы здесь: ( https://github.com/Winghin2517/EpoxyExample2).

Я хотел бы передать список объектов в контроллер эпоксидной смолы, чтобы я мог генерировать график. Однако я столкнулся с этой ошибкой при создании приложения:

ошибка: Epoxy Processor Exception: Тип в Iterable не реализует hashCode. Тип: kwaai.com.exampleepoxy_hashcodeequals.GraphData (View Prop {view='HeaderView', name='setLineChart', type=java.util.LinkedList}) Epoxy требует, чтобы каждый атрибут модели реализовывал equals и hashCode, чтобы изменения в модели можно отслеживать. Если вы хотите, чтобы атрибут был исключен, используйте опцию DoNotHash. Если вы хотите игнорировать это предупреждение, используйте опцию IgnoreRequireHashCode

Я думаю, это потому, что я использую @ModelProp в списке объектов (LinkedList of GraphDataFeed), а не в примитивном типе, как в примере приложения из Epoxy.

@ModelProp
public void setLineChart(LinkedList<GraphData> graphDataFeed) { }

Поэтому я следовал за параметрами и изменил свой @ModelProp, чтобы отразить это:

@ModelProp(options = ModelProp.Option.IgnoreRequireHashCode)

После изменения приложение собирается и работает правильно. Вы можете увидеть график ниже.

Тем не менее, я не хочу игнорировать атрибут, так как я понимаю, что Epoxy использует Diffing для обновления моделей в представлении реселлера: https://github.com/airbnb/epoxy/wiki/Diffing

Игнорирование атрибута может означать, что мои модели не обновляются корректно в представлении реселлера. В инструктивном материале здесь ( https://github.com/airbnb/epoxy/wiki/Epoxy-Models) я вижу:

Состояние модели определяется ее реализациями equals и hashCode, которые основаны на значении всех свойств модели.

Это состояние используется в diffing, чтобы определить, когда модель изменилась, так что Epoxy может обновить вид.

Эти методы генерируются, поэтому вам не нужно создавать их вручную.

Почему эти методы не генерируются для меня тогда, и если они не генерируются, как я сам генерирую эти методы, чтобы избавиться от ошибки?

1 ответ

Ваш GraphData класс должен реализовать equals и hashcode. Это говорится прямо в сообщении об ошибке, которое вы скопировали Type in Iterable does not implement hashCode. Type: kwaai.com.exampleepoxy_hashcodeequals.GraphData

Другие вопросы по тегам