ハッシュマップから値を取得するときに問題が発生します。ハッシュマップは次のように宣言されています。
HashMap<TRpair,A> aTable = new HashMap<TRpair,A>();
次に、112個の値を次のようにマップに配置します。
aTable.put(new TRpair(new T(<value>),new Integer(<value>)),new Ai());
ここで、AiはAを拡張する4つのサブクラスのいずれかです。
次に、次のように、マップにどのような値があるかを確認します。
int i = 0;
for (Map.Entry<TRpair,A> entry : aTable.entrySet()) {
System.out.println(entry.getKey().toString() + " " + entry.getValue().toString());
System.out.println(entry.getKey().equals(new TRpair(new T("!"),new Integer(10))));
i++;
}
iは、予想どおり、最後に値112を保持し、同等性テストは、予想どおり、正確に1つのエントリに対してtrueを出力します。
しかし、私がするとき
System.out.println(aTable.get(new TRpair(new T("!"), new Integer(10))));
nullが出力されますが、上記のコードスニペットは、マップにこのキーを持つエントリが実際に1つあることを確認しています。
それが役立つ場合、クラスTRpairは次のように宣言されます。
public class TRpair {
private final T t;
private final Integer r;
protected TRpair(Integer r1, T t1) {
terminal = t1;
row = r1;
}
protected TRpair(T t1, Integer r1) {
t = t1;
r = r1;
}
@Override
public boolean equals(Object o) {
TRpair p = (TRpair)o;
return (p.t.equals(t)) && (p.r.equals(r));
}
@Override
public String toString() {
StringBuilder sbldr = new StringBuilder();
sbldr.append("(");
sbldr.append(t.toString());
sbldr.append(",");
sbldr.append(r.toString());
sbldr.append(")");
return sbldr.toString();
}
}
各Ai(拡張A)およびTクラスのequals()メソッドとtoString()メソッドは同様にオーバーライドされ、期待どおりに動作するように見えます。
対応するキーの値が実際にマップにあることが以前に確認されているのに、ハッシュマップaTableから出力される値がnullになるのはなぜですか?
感謝の気持ちを込めて、
フロスコイ。