我在这里为这个问题创建了一个小型测试应用程序:(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 可以更新视图。
这些方法是生成的,因此您不必手动创建它们。
为什么没有为我生成这些方法,如果没有生成,我如何自己生成这些方法以消除错误?