我为此在此处创建了一个小型测试应用程序:(https://github.com/Winghin2517/EpoxyExample2)。
我想将对象列表传递给环氧树脂控制器,以便生成图形。但是,在构建应用程序时遇到了此错误:
错误:环氧处理器异常:Iterable中的类型未实现 hashCode。类型:kwaai.com.exampleepoxy_hashcodeequals.GraphData(查看 道具{view ='HeaderView',name ='setLineChart', 类型= java.util.LinkedList}) 环氧树脂要求每个模型属性都实现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)中,我看到它说:
模型的状态由其等式和hashCode决定 实现,它基于所有模型的价值 属性。
此状态用于差异确定模型何时更改,因此 环氧树脂可以更新视图。
这些方法已生成,因此您不必创建它们 手动。
为什么这些方法不是为我生成的,如果没有生成,我如何自己生成这些方法以消除错误?
答案 0 :(得分:0)
您的GraphData
类需要实现equals和hashcode。它在您复制的错误消息中说了这种权利
Type in Iterable does not implement hashCode. Type: kwaai.com.exampleepoxy_hashcodeequals.GraphData