Aşağıdaki kodu çevrimiçi gördüm. sınıf, Object sınıfının hashCode() ve eşittir yöntemini geçersiz kılar. Ben sadece equals() yönteminin return ifadesinin alternatif & & ve || kullanmak zorunda olduğunu merak ediyordum? Sadece & & kullanabilir miyim? Alternatif & & ve || kullanmak zorunda özel bir neden var mı?geçersiz kılma eşitleme() yönteminin döndürme ifadesi neden alternatif && ve ||?
class Person {
private int id;
private String firstName;
private String lastName;
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null || obj.getClass() != this.getClass()) {
return false;
}
Person guest = (Person) obj;
return id == guest.id
&& ((firstName == null ? guest.firstName == null : firstName.equals(guest.firstName))
|| (firstName != null && firstName.equals(guest.getFirstName())))
&& ((lastName == null ? guest.lastName == null : lastName.equals(guest.lastName))
|| (lastName != null && lastName.equals(guest.getLastName())));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + id;
result = prime * result
+ ((lastName == null) ? 0 : lastName.hashCode());
return result;
}
}
olarak çok zor bir durum olduğunu yeniden öneriyoruz. Daha okunabilir hale getirmek için ifadeler varsa bunu birden çok bölüme ayırmanızı öneririm. – Eran
Bu zorunda değil. Bunu hiç böyle görmemiştim. Onu yazan kişi, eşit çağrılarda hedefleri ters çevirdi. Bence bu bir ihtiyat ve aşırı bir anlayış. Misafir boşsa, yöntem bu karışıklığa ulaşmadan önce false değerini döndürür. Öyleyse neden misafirin boş olabileceği konusunda endişeleniyorsunuz? Muhtemelen kötü yapılmış bir şey için bir düzeltme. – duffymo
Bilgilerim ilerledikçe, bu yöntemde beklenmedik çıktılar veren mantıksal olarak yanlış kod vardır. Ama, @TonyStark, her zaman Jarvis'e sorabilirsin! – Hackerdarshi