У меня есть некоторая ниша, необходимая для отключения двух объектов общих типов X
и Y
, и используйте это для возврата типа T
. Я хочу поставить эти элементы в строго управляемый HashMap
и использовать это для поиска по клавише X, Y.Hashcode и Equals для ссылки на объект?
Однако, как я могу обеспечить, X
и Y
являются hashcoded и равенства по сравнению с их ссылкой на память, а не любая переопределенная реализация hashCode/equals?
public final class BiReferenceCache<X,Y,T> {
private final HashMap<Key<X,Y>,T> cacheMap = new HashMap<>();
public T get(X item1, Y item2) {
return cacheMap.get(new Key<X,Y>());
}
private static final class Key<X,Y> {
private final X val1;
private final Y val2;
Key(X val1, Y val2) {
this.val1 = val1;
this.val2 = val2;
}
public int hashCode() {
//??? What do I do to hashcode by val1 and val2's memory reference?
}
public boolean equals(Object obj) {
//??? What do I do to check equality for val1 and val2's memory reference?
}
}
}
Вы уверены, что хотите получить ссылку на память? Это практически противоречило бы контракту на равный метод. – Robert