簡體   English   中英

為什么TransformedCollection沒有實現hashCode?

[英]Why does TransformedCollection not implement hashCode?

我期望兩個相同的轉換到具有相同hashCode結果對象。 我想使用此屬性來檢查我的對象是否以有意義的方式更改。

不幸的是,Guava的TransformedCollection extends AbstractCollection (與AbstractList不同)它不實現hashCode或equals,而TransformedCollection本身也沒有這樣的嘗試。

  • 我們不能根據迭代器的順序返回的值計算一個hashCode嗎?
  • 或者仍然不能保證相同的hashCodes
  • 也許我們可以通過AbstractCollection無法解決的方式為TransformedCollection解決這個問題?

不幸的是,沒有明智的方法來定義Collection.hashCode 集合可以是SetList (或其他),並且兩者以不兼容的方式定義hashCode

而且,出於同樣的原因,對transformedCollection1.equals(transformedCollection2)沒有明確的定義。 它可以忽略順序,也可以不忽略(Set或List語義)。 更糟糕的是,返回的Collection只是一個視圖,而這樣的equals將是非常低效的。

我建議使用類似ImmutableList.copyOf(transformedCollection)東西並使用它。

暫無
暫無

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

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