环氧树脂要求每个模型属性都实现equals和hashCode错误

时间:2018-06-23 16:29:11

标签: android epoxy

我为此在此处创建了一个小型测试应用程序:(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)

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

enter image description here

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

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

  

模型的状态由其等式和hashCode决定   实现,它基于所有模型的价值   属性。

     

此状态用于差异确定模型何时更改,因此   环氧树脂可以更新视图。

     

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

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

1 个答案:

答案 0 :(得分:0)

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