Вам нужно решить точно что вы подразумеваете под равенством. В частности, вы говорите о том, что не платите дважды за месяц - означает ли это, что одна транзакция должна быть равна другой, если она в том же месяце, даже если она в другой день? Это звучит довольно странно - и очень специфично для использования, а не для типа - идея равенства. Также обратите внимание, что транзакция имеет только один номер счета - конечно, он должен иметь как «от», так и «к» счету, так как могут быть платежи от нескольких человек на один счет, и может быть платежи с одного счета на нескольких счетов в одном месяце.
Итак, лично я не хотел бы переопределять равенство таким образом, но если вам действительно нужно, это не так уж сложно ... Как только вы определились с тем, что составляет равенство, я бы реализовал equals
- в этот момент hashCode
обычно довольно легко.
Я бы настоятельно рекомендовал бы прочитать раздел Джоша Блоха о равенстве в Effective Java (второе издание) для получения более подробной информации, но equals
обычно будет выглядеть примерно так:
@Override public boolean equals(Object other)
{
if (other == null || other.getClass() != this.getClass())
{
return false;
}
BankTransaction otherTransaction = (BankTransaction) other;
return accountNo == otherTransaction.accountNo
&& transactionAmount == otherTransaction.transactionAmount
&& // etc;
}
Обратите внимание, что для любого поля, имеющего тип reference , вам необходимо определить, какое равенство вы хотите применить там - часто вы захотите вызвать equals
вместо того, чтобы просто использовать ссылку сравнение предоставлено ==
.