簡體   English   中英

環氧樹脂要求每個模型屬性都實現equals和hashCode錯誤

[英]Epoxy requires every model attribute to implement equals and hashCode error

我在這里針對此問題創建了一個小型測試應用程序:( https://github.com/Winghin2517/EpoxyExample2 )。

我想將對象列表傳遞到環氧樹脂控制器中,以便生成圖形。 但是,在構建應用程序時遇到了此錯誤:

錯誤:環氧處理器異常:Iterable中的類型未實現hashCode。 類型:kwaai.com.exampleepoxy_hashcodeequals.GraphData(視圖屬性{view ='HeaderView',name ='setLineChart',type = 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 )中,我看到它說:

模型的狀態由其equals和hashCode實現確定,該實現基於模型所有屬性的值。

此狀態用於差異確定何時更改模型,以便Epoxy可以更新視圖。

這些方法是生成的,因此您不必手動創建它們。

為什么這些方法不是為我生成的,如果沒有生成,我如何自己生成這些方法以消除錯誤?

您的GraphData類需要實現equals和hashcode。 它說,您復制Type in Iterable does not implement hashCode. Type: kwaai.com.exampleepoxy_hashcodeequals.GraphData錯誤消息中的此權限Type in Iterable does not implement hashCode. Type: kwaai.com.exampleepoxy_hashcodeequals.GraphData Type in Iterable does not implement hashCode. Type: kwaai.com.exampleepoxy_hashcodeequals.GraphData

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM