私はHazelast Mapを使用しており、カスタムクラスのオブジェクトであるキーに対してオブジェクトを保存しようとしていますHMapKey
。HMapKey
これがクラスのスニペットです。
public class HMapKey implements Serializable{
private String keyCode;
private long time;
public HMapKey(String keyCode, long time) {
this.keyCode = keyCode;
this.time = time;
}
public String getKeyCode() {
return keyCode;
}
public void setKeyCode(String keyCode) {
this.keyCode = keyCode;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((keyCode == null) ? 0 : keyCode.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
HMapKey other = (HMapKey) obj;
if (keyCode == null) {
if (other.keyCode != null)
return false;
} else if (!keyCode.equals(other.keyCode))
return false;
return true;
}
}
上記のコードでわかるように、keyCode
2 つのオブジェクトを比較するために equals() メソッドでのみ使用しています。time
したがって、変数にどんな値があっても構いません。しかし、このオブジェクトを Hazelcast の Map のキーとして使用して取得しようとすると、Hazelcast はキー クラスのすべての変数をチェックしているとkeyCode
思いtime
ますNULL
。Hazelcast にすべての変数チェックを行わず、既存のequals()
メソッドのみを使用するように指示する構成はありますか?
マップからデータを取得しようとしているコードは次のとおりです
HazelcastInstance instance = Hazelcast.newHazelcastInstance();
private static ConcurrentMap<HMapKey, String> testMap = instance.getMap("TEST_MAP");
testMap.put(new HMapKey("code1",123), "This is Code 1");
System.out.println(testMap.get(new HMapKey("code1",0)));
つまり、挿入中にキーオブジェクトを作成しましnew HMapKey("code1",123)
たが、取得中に新しいオブジェクトを作成しnew HMapKey("code1",0)
ていて、null 値として返されています。一方、試してみるとうまくいきnew HMapKey("code1",123)
ます。