Итак, в школе мы изучаем Java в первый раз, и мы хотели имитировать приложение Java libray, где у нас есть два класса с именем «Книга» и другое одно имя », и может быть ни одна книга с тем же ISBN в той же полке. Так что я сделал не было, как следующее внутри класса полки и она отлично работает.Когда я должен переопределить метод равенства в Java
private boolean checkIsbnNumber(Book book){
boolean isbnTaken = false;
for(Book bList : this.bookList){
if(bList.getIsbn().equals(book.getIsbn())){
System.out.println("The books isbn number is taken");
isbnTaken = true;
}
}
return isbnTaken;
}
Но наш lecturue сказал нам в следующий, перейдите на класс книги и переопределить хеш-метод и равный метод следующим образом:
@Override
public boolean equals(Object obj) {
if (obj instanceof Book)
return isbn.equals(((Book)obj).isbn);
else
return false;
}
@Override
public int hashCode() {
int hash = 3;
hash = 53 * hash + Objects.hashCode(this.isbn);
return hash;
}
Затем сделайте следующее внутри класса полки еще раз.
public boolean checkISBN(Book b){
boolean isbnExists = false;
for (Book bList : bookList)
{
if(bList.getIsbn().equals(b.getIsbn())){
System.out.println("Book ISBN already exist");
isbnExists = true;
}
}
return isbnExists;
}
Что я хочу знать, в чем смысл этого? есть ли какие-либо выгоды от этого? и почему мы снова вызываем метод equals внутри метода equals? Некоторая помощь будет принята с благодарностью.
Ммм ... Я не вижу разницы.Помимо частного vs public, единственными очевидными изменениями являются имена переменных/методов и выходной текст. (Кстати, вывод текста здесь кажется неправильным.) То, что метод на самом деле * делает *, как оно работает, не изменилось ни на один бит. – cHao