Хорошая идея для предотвращения коллизий хеширования - поразрядно-хоровать любой хеш-код, который вы вычисляете, с помощью хеш-кода класса:
@Override
public int hashCode()
{
// Here you calculate your hashcode into variable h...
return h ^ this.getClass().hashCode();
}
Можно сделать нечто подобное с equals
, чтобы предотвратить равенство между объектамиразных классов:
@Override
public boolean equals(Object other)
{
if (this.getClass() != other.getClass()) return false;
// Rest of you code here...
}
Кроме того, то, что вы делаете, совершенно разумно и правильно.