【发布时间】:2013-05-14 09:56:08
【问题描述】:
我在使用 Hashmap 时遇到问题。目前,我的 HashMap 是一个名为 Names 的枚举的 HashMap,使用的键为 Key Signatures 或 HashMap<KeySignature, Names>。目前,Name Enum 存储 KeySignatures 或 C_FLAT_MAJOR(new KeySignature(7, Accidental.FLAT, Scale.MAJOR); 的值。为了获得给定 KeySignature 的 Enum 版本,我创建了上面解释的 HashMap:
private static final HashMap<KeySignature, Names> lookup = new HashMap<KeySignature, Names>();
static {
for (Names name : Names.values()){
lookup.put(new KeySignature(name.getKeySig()), name);
}
}
因此,当我需要检查 KeySignature 的 Enum 版本是什么时,我会调用位于 KeySignature 类中的方法:
public Names getCommonName() {
return Names.lookup.get(this);
}
但是,返回的值始终为空。
我不知道是什么原因造成的,但似乎HashMap.get() 方法是通过引用而不是值来比较键和参数。我是否必须重写 KeySignature 的 .equals 和 .hash 方法,还是我的方向完全错误?
【问题讨论】:
-
是的,你必须在
KeySignature中定义很多equals