【发布时间】:2016-12-20 09:05:39
【问题描述】:
我正在使用 Hazelast Map 并尝试根据我的自定义类的对象(即 HMapKey)存储对象。这是HMapKey类的sn-p。
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;
}
}
正如您在上面的代码中看到的,我只在 equals() 方法中使用了keyCode 来比较两个对象。所以无论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),它工作正常。
【问题讨论】:
-
你能把代码贴在你试图从地图中检索的地方吗?
-
更新了我的问题。