Каждый раз, когда вам нужно переопределить метод, подпись должна совпадать с методом, который нужно переопределить. Поэтому вы должны передать Object в качестве единственного аргумента в ваш метод equals, чтобы он функционировал должным образом.
В качестве альтернативы твердому решению Грэнтэма вы можете использовать getClass () вместо instanceof, если, например, вы планируете расширить свой универсальный класс и не хотите, чтобы экземпляры подкласса когда-либо равнялись вашим экземплярам суперкласса.
Это будет выглядеть так:
@Override
public boolean equals(Object other) {
if (other != null && getClass() == other.getClass()) {
T o = (T) other;
// ...
}
return false;
}