package org.archstudio.sysutils; public abstract class AbstractGenericKey<D, V> implements TypedMap.Key<V> { private final int keyDataHashCode; private final D keyData; public AbstractGenericKey(D keyData) { this.keyData = keyData; this.keyDataHashCode = keyData == null ? 0 : keyData.hashCode(); } public D getKeyData() { return keyData; } @Override public final int hashCode() { return keyDataHashCode; } @Override @SuppressWarnings("rawtypes") public final boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } AbstractGenericKey other = (AbstractGenericKey) obj; if (keyData == null) { if (other.keyData != null) { return false; } } else if (!keyData.equals(other.keyData)) { return false; } return true; } @Override public final String toString() { return "Key[id=" + keyData + "]"; } }