【发布时间】:2014-08-07 14:54:27
【问题描述】:
好的,我了解equals 和hashcode 的工作原理以及它们在hashmap 中的使用方式。 但是我想到了这个问题,如果我有一个第三方对象没有覆盖哈希码和等于,我什至不允许修改它。
考虑以下类:
//Unmodifiable class
public final class WannaBeKey{
private String id;
private String keyName;
//Can be many more fields
public String getId()
{
return id;
}
public String getKeyName()
{
return id;
}
//no hashcode or equals :(
}
现在我想将这个类作为我的 Hashmap 键,显然如果没有 equals 和 hashcode,它将无法工作。我想知道有没有办法处理这种情况?我什么都想不出来,或者我想不通..
谢谢。
【问题讨论】:
-
它确实有一个 equals 和一个 hashCode -
Object。 -
是的,但这并不总是足够好,他可能需要基于 WannaBeKey 的 id 而不是实例的相等性
-
但是它们在 hashmap 中会失败,因为 Objects equals 方法会检查引用相等而不是内容相等。
-
如果来自 Object 的那些还不够,那么您可能必须创建一个 decorator。
-
将地图的键设为 id 字符串。