2

我在这里为这个问题创建了一个小型测试应用程序:(https://github.com/Winghin2517/EpoxyExample2)。

我想将对象列表传递给环氧树脂控制器,以便生成图表。然而,我在构建应用程序时遇到了这个错误:

错误:环氧树脂处理器异常:Iterable 中的类型未实现 hashCode。类型:kwaai.com.exampleepoxy_hashcodeequals.GraphData (View Prop {view='HeaderView', name='setLineChart', type=java.util.LinkedList}) Epoxy 要求每个模型属性都实现 equals 和 hashCode 以便模型的变化可以被追踪。如果您希望排除该属性,请使用选项“DoNotHash”。如果您想忽略此警告,请使用选项“IgnoreRequireHashCode”

我认为这是因为我在对象列表(GraphDataFeed 的 LinkedList)上使用了@ModelProp,而不是根据 Epoxy 的示例应用程序在原始类型上使用。

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

所以我遵循了这些选项并修改了我的@ModelProp 以反映这一点:

@ModelProp(options = ModelProp.Option.IgnoreRequireHashCode)

更改后,应用程序构建并正确运行。你可以看到下面的图表。

在此处输入图像描述

但是,我不想忽略该属性,因为我了解 Epoxy 使用 Diffing 来更新 recyclerview 中的模型:https ://github.com/airbnb/epoxy/wiki/Diffing

忽略该属性可能意味着我的模型没有在 recyclerview 中正确更新。在这里的指导材料(https://github.com/airbnb/epoxy/wiki/Epoxy-Models#annotations)中,我看到它说:

模型的状态由其 equals 和 hashCode 实现确定,这基于模型所有属性的值。

此状态用于比较以确定模型何时更改,以便 Epoxy 可以更新视图。

这些方法是生成的,因此您不必手动创建它们。

为什么没有为我生成这些方法,如果没有生成,我如何自己生成这些方法以消除错误?

4

1 回答 1

-1

你的GraphData类需要实现equals和hashcode。它在您复制的错误消息中说明了这一点 Type in Iterable does not implement hashCode. Type: kwaai.com.exampleepoxy_hashcodeequals.GraphData

于 2018-07-28T19:28:50.087 回答