我在使用 Hashmap 时遇到问题。目前,我的 HashMap 是一个名为 的枚举的 HashMap Names
,使用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);
}
但是,返回的值始终为 null。
我无法弄清楚是什么原因造成的,但似乎该HashMap.get()
方法是通过引用而不是值来比较键和参数。我是否必须覆盖 KeySignature 的 .equals 和 .hash 方法,还是我的方向完全错误?