У меня есть класс Point
и класс MinesweeperSquare
, последний является подклассом первого. Если я переопределю метод equals
в последнем, вот так:
if (!(obj instanceof MinesweeperSquare)) {
return false;
}
FindBugs сообщает, что:
Этот класс определяет метод equals, который переопределяет метод equals в суперклассе. Оба равных метода
методы используют instanceof
при определении того, равны ли два объекта. Это чревато опасностью,
поскольку важно, чтобы метод equals был симметричным (другими словами, a.equals(b) == b.equals(a)
).
Если B является подтипом A, и метод equals A проверяет, что аргумент является экземпляром A, и метод equals B
проверяет, что аргумент является экземпляром B, вполне вероятно, что отношение эквивалентности, определенное этими
методы не симметричны.
В классе Point
я написал:
if (!(obj instanceof Point)) {
return false;
}
Как мне написать equals
метод в MinesweeperSquare
, чтобы метод equals
был симметричным?
Обновление
FindBugs не сообщает об ошибках, если я пишу следующее в MinesweeperSquare
:
if (o == null || this.getClass() != o.getClass()) {
return false;
}