2010-06-10 59 views

回答

16

不幸的是,我不相信这是一个 - 这是在提供哈希映射等定制的相等比较:(

显然有Comparable<T>作为一个相当于IComparable<T>Comparator<T>IComparer<T>,但我而言痛苦不相信还有的IEqualityComparer<T>IEquatable<T>任何等价的。

,可能还有相同类型的接口,并且使用它们,当然地图的第三方库...

+0

尽管创建一个实现'Map'和你自己的'Equatable'(*即使是一个单词?*)接口的委托装饰器也不算什么。 – Esko 2010-07-12 11:12:24

+0

@Esko:你的意思是让底层地图包含代理密钥,有效吗?这是可行的,但它会很丑陋...我怀疑当你试图做弱地图时会产生问题。如果它已经在那里开始,它会更好。 – 2010-07-12 13:40:49

+0

为什么不这样。通过'WeakReference'进行代理不应该是额外的工作。不过,我确实看到了你的观点,C#有很多这些东西很容易实现,而Java喜欢成为“准系统”语言。我猜Google集合可能通过它的谓词/函数系统来实现这个功能,但我不确定... – Esko 2010-07-12 14:44:49

6

如果您只是在寻找该接口来实施equals()方法,则可以直接覆盖object.equals()方法。

+1

'equals()'的一个很好的重写实现可以在这里找到: http://stackoverflow.com/questions/185937/overriding-the-java-equals-method-quirk – Julien 2013-02-21 09:15:48

1

IEquatable<T>接口主要用于存储许多可能为拆箱结构类型的实例的泛型类;对于密封类型来说它是有用的,并且比没有密封的类型更糟糕。因此,在Java中实现IEquatable<T>真的没有任何意义。

相关问题