代码之家  ›  专栏  ›  技术社区  ›  Simon Sudhin

Epoxy需要每个模型属性来实现equals和hashCode错误

  •  1
  • Simon Sudhin  · 技术社区  · 6 年前

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

    我想将对象列表传递到epoxy控制器,以便生成一个图。但是,我在生成应用程序时遇到此错误:

    错误:环氧处理器异常:Iterable中的类型未实现 哈希码类型:kwai.com.examplepoxy_hashcodequals.graphdata(视图 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)
    

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

    enter image description here

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

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

    模型的状态由其equals和hashCode决定 实现,它基于所有模型的 财产。

    在diffing中使用此状态来确定何时更改了模型,以便 环氧树脂可以更新视图。

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

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   konakid    6 年前

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

    推荐文章