ハッシュマップに問題があります。現在、私の HashMap は、 またはNames
のキーを使用して、と呼ばれる列挙型の HashMap です。現在、Name Enum には KeySignatures または. 特定の KeySignature の Enum バージョンを取得するために、上記で説明した HashMap を作成しました。Key Signatures
HashMap<KeySignature, Names>
C_FLAT_MAJOR(new KeySignature(7, Accidental.FLAT, Scale.MAJOR);
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 メソッドをオーバーライドする必要がありますか、それとも完全に間違った方向を見ているのでしょうか?