Причина, по которой вы получаете ошибку class java.lang.Object cannot be cast to class A
, заключается в том, что объект, с которым вы сравниваете ее, не является экземпляром класса A, поэтому попытка привести объект как таковой завершится неудачей.
Когда Реализуя метод .equals
, вы должны всегда выполнять эти три проверки в первую очередь, чтобы обеспечить безопасность объекта, прежде чем пытаться сравнивать его свойства:
if (obj == this) return true;
Если два объекта являются абсолютно одинаковыми объектами, это означает, что это один и тот же экземпляр, а не просто два объекта с одинаковыми свойствами, которые сразу же возвращают true, потому что нет необходимости проверять свойства.
if (obj == null) return false;
Это предотвращает NullPointerException
, пытаясь получить доступ к свойству объект null
(например, когда в вашем коде вы делаете return x == _obj.x
)
if (!(obj instanceof A)) return false;
Если объект не является экземпляром вашего класса, произойдет сбой приведения типа (как это было в вашем коде) и это защищает от этого, возвращая false
перед попыткой сотворения.
Наконец, если код достигает этой точки, вы можете разыграть и сравнить объекты так, как вы это делали. один в вашем коде:
A _obj = (A) obj;
return this.x == _obj.x;
Имейте в виду, что если сравниваемые свойства не являются примитивами, вы должны использовать .equals
для них