Я использую Hazelast Map и пытаюсь сохранить объекты против ключа, который является объектом моего пользовательского класса, то есть HMapKey
. Вот фрагмент класса HMapKey
.Невозможно извлечь элемент из карты Hazelcast, если использовать пользовательский объект в качестве ключа
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
в равных() для сравнения двух объектов. Так что независимо от того, какое значение для переменной time
. Но когда я использую этот объект в качестве ключа в карте Hazelcast и пытаюсь его восстановить, я думаю, что 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)
, он работает нормально.
Вы можете также разместить код, где вы пытаетесь получить с карты? –
Обновлен мой вопрос. – Navnath