2013-06-04 18 views
7

Etkili Java'da, equals() yönteminin beşinci ilkesinin, tüm nesnelerin null için eşit olmaması gerektiği yönündeki yazılarını okudum. Kitap null için açık bir testi kullanılarak programcılar tarafından yazılmış bazı sınıfları bu karşı korumak olduğunu söylemeye devam ediyor: Etkili Java göreGereksizlik gereksinimi veya ilkesi

public boolean equals(Object o){ 
    if (o == null) 
     return false; 
    ... 
} 

, yukarıda değil boş bir test gereksizdir. Ancak, benim sorum, neden o zaman pek çok programcı bu sıfır şartı için test yapıyor?

+3

Hiç kimsenin boş bir nesneyi gönderemeyeceğine güvenemezsiniz ... – vikingsteve

cevap

8

Sen yapabileceği bir instanceof testi ile:

public boolean equals(Object o){ 
    if (!(o instanceof MyObject)) 
     return false; 
    ... 
} 

null şey örneği değildir, bu nedenle bu çalışır.

+0

kesinlikle daha iyi cevap +1 – stinepike

+1

kullanmadıysanız cevabım bir alternatiftir. Öyle açık ki hiç farkında değildim. +1, eğer yapabilirsem +2. – Fildor

+0

Tabi ki, bu mükemmel bir anlam ifade ediyor. Instanceof testini kullanarak, otomatik olarak, eşittir() testinde null değersiz olmadığını kontrol ederiz. – blackpanther

2
Object firstObject = null; 
secondObject.equals(firstObject); 

Bunu nasıl önleyebilirsiniz? Kullanmadan önce null kontrol etmezseniz o zaman çökecektir. Ben de bir NullPointerExceptionequals() çağrıldığında önlemek için

 if (other == null || other.getClass() != this.getClass()) { 
      return false; 
     } 
+2

Aslında bunun için sınava gerek yok. Etkili Java'da önerilen yöntem olduğu için instanceof'i kullanabiliriz. – blackpanther

+0

Evet, kesinlikle Jonas'ın cevabı açık bir şekilde anlattı. Eğer cevabım – stinepike

0

aşağıdaki gibi sınıf türünü kontrol etmek gerekir düşünüyorum.

0

olası nedenler kontrol etmek:

eski alışkanlıklarından diğer dillere

den

sen (boş işaretçi istisnalar atmak olabilir

kütüphaneleri belirtilen ilke aşina olmama bunu garanti edemez başkası bir şey yapmadı!)

Yalnızca nesnenizin boş olmayan bir örneği için değerlendirilmesi gereken birkaç iç içe komutunuz varsa

01 baypas etmek isteyebilirsiniz
0

Sektörde, kodda gereksiz kontroller ya da tuzaklardan kaçınmak için birçok uygulama vardır, ancak hataların gerçekleşebileceği ya da birinin, hangi sistemin eksik olduğu değerlere sahip olan bazı üçüncü taraf sistemlerinden gelen veriler gibi kontrol edilemeyen durumlar olabilir. bu yüzden kontrollerin yapılması gerekiyor. Dünya mükemmel değil!

İlgili konular