我正在使用 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
了 equals() 方法来比较两个对象。所以无论time
变量有什么价值。但是当我在 Hazelcast 的 Map 中将此对象用作键并尝试检索它时,我认为 Hazelcast 检查键类的每个变量,因此,即使我有相同的keyCode
变量值和不同的time
变量,Hazelcast 也会将我返回为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)
,这将我作为空值返回。而如果我尝试new HMapKey("code1",123)
它工作正常。