class Object{
String x;
int y;
Object (String a, int b){
this.x = a;
this.y = b;
@Override
boolean equals(Object obj){
return (this.x.equals(obj.x)) && this.y == obj.y);
}
}
Здесь я пытаюсь написать метод, который переопределяет equals(), чтобы одновременно приравнивать два значения, строку и целое число. Чтобы проверить равенство строк, я использую оригинальный метод equals(), который я переопределяю.
Могу ли я сделать это без ошибок? Или я не могу использовать исходный метод equals() внутри метода, переопределяющего его? Есть ли лучший способ достичь этого?
Я не совсем в состоянии найти ответы на этот вопрос в Интернете, но это может быть результатом незнания технической формулировки ситуации, подобной этой.
спасибо
Я думаю, проблема в том, что вы неправильно переопределяете метод Object.equals(). Если вы пытаетесь проверить, что и String, и int равны для того, чтобы ваш объект был равен, это похоже на то, что вы хотите, чтобы новый объект представлял все, что представляет собой String и int:
class MyObj {
private String str;
private int num;
...
}
(с соответствующими методами получения и сеттера)
Затем вы можете переопределить MyObj.equals() следующим образом:
@Override
boolean equals(MyObj that){
/* First check for null and all that stuff */
...
return this.str.equals(that.getStr()) && this.num == that.getNum();
}
Вызов:
super.whatevername();
Или в этом случае:
super.equals(someObject);
Это вызовет метод суперкласса
Кстати, исходный метод равенства равен
public boolean equals(Object obj)
Кстати, весь ваш блок возврата может быть заменен на:
return (this.x.equals(obj.x)) && this.y == obj.y);
То, как вы это делали, неэффективно и заставляет меня съеживаться:/
super.equals()
Не так ли?equals(String, int)
? Если нет, то@Override
поймает это. Обычная подпись для equalsequals(Object)
.