2011-01-14 83 views
6

它看起来像hashCode()和equals()被声明为final。所以重写实现是不可能的。它还指出,如果对象是JavaScript相同的(triple-equals),则equals()返回true。我不太清楚在GWT中创建两个完全相同的JavaScriptObject并将它们与equals()进行比较会返回false。此外,它看起来像hashcode()使用单调递增的计数器来分配一个哈希代码到底层的JavaScript对象。如果我想将JavaScriptObjects存储在Set中,这会使事情变得复杂。任何帮助将非常感激。在GWT中比较两个JavaScriptObjects的最佳方式是什么?

回答

5

这取决于您希望使用哪种平等标准来处理您的情况。

  • 如果您想要对象标识,您可以使用预定义的equals()和hashCode() - 并将JavaScriptObjects直接放在HashSet中。
  • 如果您需要不同的平等概念,您可以编写自己的比较器,并将JavaScriptObjects放入一个TreeSet,由新的TreeSet(comparator)创建。
  • 如果您需要将JavaScriptObjects放入HashSet(而不是TreeSet),并且仍然需要不同的平等概念,则不能将JavaScriptObjects直接放在Set中。然后你必须编写一个包含JavaScriptObject的包装类,并实现equals()和hashCode()。
+0

感谢您的建议克里斯。 – affablebloke

+0

由于我使用GWT的MultiSelectionModel 并且MultiSelectionModel 的底层内部使用HashMap和HashSet,所以编写实现自己的equals()和hashCode()的泛型包装类是解决方案。 – affablebloke

相关问题