У меня есть класс 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;
}