我已经为这个问题创建了一个小型测试应用程序:(
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)
更改后,应用程序将正确生成并运行你可以看到下面的图表。
但是,我不想忽略该属性,因为我了解epoxy使用diffing来更新recyclerview中的模型:
https://github.com/airbnb/epoxy/wiki/Diffing
忽略该属性可能意味着我的模型无法在RecyclerView中正确更新。
在这里的指导材料里(
https://github.com/airbnb/epoxy/wiki/Epoxy-Models#annotations
),我看到上面写着:
模型的状态由其equals和hashCode决定
实现,它基于所有模型的
财产。
在diffing中使用此状态来确定何时更改了模型,以便
环氧树脂可以更新视图。
这些方法是生成的,因此您不必创建它们
手动操作。
为什么这些方法没有为我生成,如果它们没有生成,我如何自己生成这些方法来消除错误?