Epoxy требует, чтобы каждый атрибут модели реализовывал ошибку equals и hashCode - PullRequest
0 голосов
/ 23 июня 2018

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

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

ошибка: исключение процессора эпоксидной смолы: тип в Iterable не реализует хэш-код. Тип: kwaai.com.exampleepoxy_hashcodeequals.GraphData (Просмотреть Prop {view = 'HeaderView', name = 'setLineChart', тип = 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)

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

enter image description here

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

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

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

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

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

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

1 Ответ

0 голосов
/ 28 июля 2018

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

...