SORU
22 Mayıs 2010, CUMARTESİ


Eşittir yerine NullPointerException fırlatır eğer kötü bir fikir mi?

null, ile ilgili equals sözleşme aşağıdaki gibidir:

Boş olmayan herhangi bir referans değer x, x.equals(null) return false.

Bu o1 != null o2 == null, eğer var çünkü oldukça garip.:

o1.equals(o2) // returns false
o2.equals(o1) // throws NullPointerException

o2.equals(o1) throws NullPointerException aslında programcı hatası bizi uyarır, çünkü iyi bir şeydir. Ve henüz, bu hata çeşitli nedenlerden dolayı biz sadece etrafında sadece "" yerine. sessizce başarısız olur o1.equals(o2), geçtiyseniz avlanır olmaz

O zaman sorular şöyle:

  • Neden o1.equals(o2) 12 ** NullPointerException atmak yerine gereken iyi bir fikir mi?
  • Mümkün olan her yerde fena fikir biz anyObject.equals(null) NullPointerException atmak böylece sözleşme yeniden yazmak yerine?

Comparable ile karşılaştırma

Buna karşılık, bu Comparable contract diyor ki:

null herhangi bir sınıfın örneği değil, ve e.compareTo(null) e.equals(null) false döner olsa da NullPointerException atmak gerektiğini unutmayın.

NullPointerException compareTo neden equals için değil mi? uygun ise

İlgili sorular


Tamamen semantik bir tartışma

Bu Object.equals(Object obj) belgelerinde gerçek sözleri:

Bazı belirtirdiğer nesne""bu bir. eşittir

Ve bir nesne nedir?

JLS 4.3.1 Objects

Birnesnebirsınıf örneğiya da bir dizi.

Referans değerleri (genellikle sadecereferanslarnesne bu ve null özel bir referans işaretçiler, hangihiçbir nesne anlamına gelir.

Bu açıdan benim iddiam çok basit.

  • equals bazı testler isterdiğer nesne""this . eşittir
  • null referans verirdiğer nesnetest için
  • Bu nedenle, equals(null) NullPointerException atmak gerekir

CEVAP
22 Mayıs 2010, CUMARTESİ


Bu asimetri tutarsız olup olmadığı sorusu için, bence değil, ve ko-bir: bu antik Zen başvurmak istiyorum

  • Eğer bir sonraki adam kadar iyi olursa, herhangi bir adama sor, ve her "Evet" diyecek.
  • Eğer bir kimse kadar iyi olursa, herhangi bir adama sor, ve her "hayır" diyecektir.
  • Eğer herhangi bir erkek kadar iyi olursa kimse sormak ve hiç bir cevap alırsınız.

O anda, derleyici aydınlanma ulaştı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • emimusic

    emimusic

    10 Mart 2006
  • Max Lee

    Max Lee

    18 AĞUSTOS 2006