Предоставить реализации методов equals, hashCode и compareTo для класса

У меня есть экзамен, и это было в макете, и я не совсем уверен, как это сделать, это не домашнее задание, я просто пытаюсь понять, как это делать. Спасибо.

public class Book{
private final String title;
private final String author;
private final int edition;

private Book(String title, String author, int edition)
{
this.title = title;
this.author = author;
this.edition = edition;
}

public String getTitle()
{
return title;
}

public String getAuthor()
{
return author;
}

public String getEdition()
{
return edition;
}

}

Мне нужно предоставить реализации методов equals, hashCode и compareTo для приведенного выше кода.

Я не уверен, как это сделать, будет ли это что-то подобное для метода compareTo?

title.compareTo(title);
author.compareTo(author);
edition.compareTo(edition);

Спасибо, любая помощь будет принята с благодарностью.


person user2216636    schedule 23.05.2013    source источник
comment
См. этот вопрос для хорошего обзора equals() и hashCode().   -  person Jonathan    schedule 23.05.2013


Ответы (3)


ваш compareTo должен быть таким:

title.compareToIgnoreCase(otherTitle);  
...  

равно:

if(null == title || null == author || null == editor)  
{  
      return false;
}  
if(!title.equals(otherTitle)  
{
    return false;  
}    
if(!author.equals(otherAuthor)  
{  
     return false;  
}  
if(!editor.equals(otherEditor)  
{  
        return false;  
}    
return true;
person Woot4Moo    schedule 23.05.2013
comment
Большое спасибо, будет большим подспорьем - person user2216636; 23.05.2013

Взгляни на это.

http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/builder/package-summary.html

Вы можете использовать построители в этом пакете для создания реализаций по умолчанию.

person Sumit    schedule 23.05.2013

IDE, такие как Eclipse, могут генерировать для вас методы hashCode и equals (Источник -> сгенерировать hashCode () и equals ()). Вы даже можете указать, какие поля объекта должны совпадать, чтобы он считался «равным».

Например, вот что Eclipse генерирует для вашего класса:

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((author == null) ? 0 : author.hashCode());
    result = prime * result + edition;
    result = prime * result + ((title == null) ? 0 : title.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Book other = (Book) obj;
    if (author == null) {
        if (other.author != null)
            return false;
    } else if (!author.equals(other.author))
        return false;
    if (edition != other.edition)
        return false;
    if (title == null) {
        if (other.title != null)
            return false;
    } else if (!title.equals(other.title))
        return false;
    return true;
}
person Greg Leaver    schedule 23.05.2013