SORU
26 HAZİRAN 2010, CUMARTESİ


Neden int num = Tamsayı yapar.getİnteger (&; 123"") NullPointerException at?

aşağıdaki kod benim için NPE atar:

int num = Integer.getInteger("123");

statik olduğu için benim derleyici null getİnteger yürütmesini? bu hiç mantıklı değil!

biri neler olduğunu açıklayabilir mi?

teşekkürler.

CEVAP
26 HAZİRAN 2010, CUMARTESİ


Büyük Resmi

Oyun burada: iki konu var

  • Integer getInteger(String) sizce ne yapmaz
    • Bu durumda null döndürür
  • int nedenleri Integer otomatik kutulama atama
    • null, NullPointerException atılır Integer beri

(int) 123 sana (String) "123" ayrıştırma int Integer.parseInt(String) örneğin kullanabilirsiniz.

Referanslar

Integer başvurular API


Integer.getInteger

Belgelere bu yöntemi ne yaptığı hakkında söyledikleri:

public static Integer getInteger(String nm): tamsayı değeri sistemin belirtilen ada sahip bir özellik Belirler. Eğer belirtilen ada sahip bir özellik yok, eğer belirtilen adı boş ise veya 18**, ya da eğer bu özellik doğru sayısal biçime sahip değilse, o zaman null döndürülür.

Diğer bir deyişle, bu yöntem int/Integer değer String bir ayrıştırma ile hiçbir ilgisi yoktur, daha ziyade, System.getProperty yöntemi ile ilgisi yoktur.

Kuşkusuz bu çok büyük bir sürpriz olabilir. Kütüphane bu gibi sürprizler vardır, ama değerli bir ders öğretir bir şanssızlık hep bir yöntemi yaptıklarını onaylamak için belgelerine bakın.

Coincindentally, bu sorunun bir türevi Return of the Puzzlers: Schlock and Awe (TS-5186) Josh Bloch ve Neal yer aldı Gafter 2009 JavaOne Teknik Oturum sunum. İşte sonuç slayt:

Ahlaki

  • Garip ve korkunç yöntemleri kütüphanelerde pusuda
    • Bazı isimler sondaj zararsız
  • Eğer kodunuzu terbiyesizlik ederse
    • Doğru yöntemler aradığına emin olun
    • Kütüphane belgeleri okuyun
  • API tasarımcılar için
    • En az ilkesini ihlal şaşkınlık yok
    • Soyutlama hiyerarşisini ihlal yok
    • Çılgınca farklı davranışlar için benzer isimler kullanmayın

Bütünlüğü için, ayrıca Integer.getInteger benzer bir uygulama olan bu yöntem vardır:

İlgili sorular


Autounboxing

Diğer konu, tabii ki, NullPointerException atılmış olur. Bu konu üzerinde odaklanmak için, aşağıdaki gibi pasajını kolaylaştırmak edebiliriz

Integer someInteger = null;
int num = someInteger; // throws NullPointerException!!!

İşte Etkili Java 2. Baskı, Madde 49 bir alıntı: kutulu ilkel ilkel türleri Tercih:

Özetle, tercih ilkel seçim var her zaman ilkel kutulu kullanın. İlkel türler daha basit ve daha hızlıdır. Eğer kutulu ilkel kullanmanız gerekiyorsa, dikkatli olun! Autoboxing ayrıntı, ama tehlike, kutulu ilkelleri kullanarak azaltır. Program == operatörü ile iki kutulu ilkel karşılaştırdığında, istediğini neredeyse kesin olmayan bir kimlik karşılaştırma yapar. Programınızı karışık tip hesaplamaları kutulu ve Kutusuz ilkel karıştığı zaman, kutulama ve kutulama program yaptığında, NullPointerException atabilir. Programınızı ilkel değerleri kutuları, son olarak, pahalı ve gereksiz nesne oluşturma neden olabilir.

Ama kutulu ilkel kullanmak için seçim var bazı yerlerde yok, örneğin jenerik, ama aksi takdirde cidden eğer kutulu ilkel kullanmaya karar haklı olup olmadığını düşünmelisiniz.

İlgili sorular

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DancingIsAPassion

    DancingIsAPa

    29 AĞUSTOS 2009
  • psidot

    psidot

    2 Kasım 2006
  • William Hyde

    William Hyde

    23 HAZİRAN 2008