Metoda hashCode i equals

0

Czy mógłby mi ktoś wytłumaczyć do czego w podanej klasie służy metoda hashCode i equals i dlaczego występują z adnotacją hashCode?

 
public class Customer implements Serializable{

	private static final long serialVersionUID = 2284040482222162898L;
	private String name;
	private String surname;
	private Address billingAddress;
	private String phoneNumber;

@Override
	public int hashCode() {
		final int prime = 853;
		int result = 1;
		result = prime * result
				+ ((customerId == null) ? 0 : customerId.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;
		Customer other = (Customer) obj;
		if (customerId == null) {
			if (other.customerId != null)
				return false;
		} else if (!customerId.equals(other.customerId))
			return false;
		return true;
	}

}
0

No i właściwie nie rozumiem po co taka klasa ma być serializowana? Do zapisu obiektów?

0

No i właściwie nie rozumiem po co taka klasa ma być serializowana? Do zapisu obiektów?

Niezbyt rozumiem pytanie, serializacja to właśnie zapisywanie obiektów. W Javie jest wymóg, by klasa, której obiekty chcemy zapisywać implementowała interfejs Serializable. Dlaczego akurat klasa Customer ma być serializowana? Spójrz na resztę kodu programu.
2. Metoda equals rozstrzyga, kiedy dwa różne obiekty uważamy za identyczne. Z reguły porównujemy zawartość pól. Podana przez Ciebie metoda equals jest błędna, korzysta z nie istniejącego pola customerId.
3. Metoda hashCode nie jest konieczna, ale przeczytaj to: https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--
4. Gdzie Ty widzisz adnotację hashCode?

0

Metoda equals służy do porównywania obiektów.

Zarówno metoda equals jak i hashCode jest domyślnie zaimplementowana w clasie Object z której niejawnie dziedziczą wszystkie klasy, więc obie metody masz dostępne, aczkolwiek może zachodzi potrzeba innego porównywania obiektów niż to domyślne, wtedy możesz przeciążyć te metody stąd właśnie adnotacja @Override.
Przykładem może być Osoba dla którego nie interesuje Cię imię czy nazwisko a wystarczy że dwie osoby będą tego samego wzrostu ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1