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