NullPointerException’dan Kaçış

Muhtemelen Java’da karşılaştığınız ilk istisnadır(exception) ve  yeni başlayanlar için bir kâbus niteliğindedir kendisi. Yazdığınız kodun kalitesi yüksek olabilir ama bazen gözünüzden kaçan ufak bir kontrol canlı(production) ortamda NullPointerException fırlamasına ve sistemin kırılmasına sebep olabilir. Bu yazımda bunu en aza indirmek için bazı yöntemlerden bahsedeceğim.

nullpointerexception ile ilgili görsel sonucu

NullPointerException Nedir ?

Bildiğiniz gibi, Java, ilkel(primitive) türlere(boolean, int, vb.) ve referans türlerine(Boolean, Integer) ayrılmıştır. Java’daki referans türlerinde , “nesne yok” demenin yolu “null” ‘dır. NullPointerException, null olan referans üzerinden herhangi bir işlem yapmaya çalışıldığında çalışma anında(Runtime) oluşan bir istisnadır. İstisnalar(Exceptions) konusunda yazımı buradan okuyabilirsiniz.

Kaçış Yolları

NullPointerException’ı önlemek için dikkatli ve defansif kodlama yöntemlerini kullanmalısınız. Bahsedeceğimiz yöntemler kod kalitesi ve sağlamlık üzerinde önemli etkiye sahip olan basit yöntemlerdir. Ayrıca sürekli kullanıldığımız != null kontrollerini de büyük ölçüde azaltacaktır. Eğer sizinde kullandığınız yöntemler varsa paylaşabilirseniz sevinirim.

equals() ve equalsIgnoreCase() kullanımına dikkat etmek

Equals() metodu simetrik olduğu için, a.equals(b) ‘yi çağırmak b.equals(a)‘ yı çağırmakla aynıdır ve bu yüzden birçok yeni yazılımcı a ve b nesnelerine dikkat etmemektedir. equals metodunu çağıran nesnenin null olması durumunda NullPointerException fırlayacaktır. Bu sebeple equals metodunu çağıran nesnenin kesinlikle null olmadığından emin olmalısız.

 

toString() yerine valueOf() kullanmak

Null referans’ın toString() metodunu çağırdığında NullPointerException’ı fırlayacağından, valueOf () metodunu kullanmak daha iyidir. Özellikle de Integer, Float, Double, BigDecimal gibi referans tipler söz konusu olduğunda kullanılmalıdır. Nesnenin null olup olmadığından emin değilseniz ideal bir yöntemdir.

 

Güvenli kütüphaneler kullanmak

En yaygın olanlardan biri, Apache’nin StringUtils sınıfıdır. NullPointerException endişesi olmadan StringUtils.isBlank(), isNumeric(), isWhiteSpace() ve diğer yardımcı metotlarını kullanabilirsiniz. Fakat siz yine de javadoc’larını okumayı unutmayın.

 

Collection döndüren metotlarda null yerine boş collection’lar döndürün

Effective Java kitabının ikinci baskısının 43. Maddesinde (Birinci Basımdaki # 27), Joshua Bloch metotların null döndürmeleri yerine boş olarak dönmelerini önerir. Diyelim şirketinizdeki diğer yazılımcıların kullanacağı liste döndürecek şekilde API yazıyorsunuz. Bu API’yı kullanan yazılımcılar her çağırım yaptıklarında null kontrolü yapmak zorundadır. Fakat null değilde, listeyi boş olarak döndürüseniz kullanılan iterasyonlarda veya isEmpty() gibi kontrollerde patlamayacaktır.

 

@NotNull ve @Nullable gibi notasyonları kullanın

@Nullable ve @NotNull kendi başına hiçbir şey yapmaz. Dokümantasyon araçları olarak hareket etmektedirler. FindBugs gibi pluginlerin kod analizi yapmasını ve uyarı vermesini sağlar. Ayrıca derleme anında(compile time) IDE’lerde NullPointerException’ın ortaya çıkabileceği kodu işaret eder. Intellij açıklaması için tıklayınız.

İlkel(primitive) tipleri unutmayın

İlkel tiplerde null olmadığından dolayı olabildiğince özellikle matematiksel işlemlerde ilkel tipleri kullanmaktan yana olun.

Metotların null parametreleri olmamalıdır

İki veya daha fazla parametre bekleyen bir metot olsun. Bu parametrelerden biri null olarak gönderilirse, metot farklı bir şekilde çalışır veya işleyişine göre kırılabilir.

Burada yapılması gerekenler öncelikle kullanılan metot içerisinde parametrelerin null kontrolleri koyulmalı ve metot throws ile işaretlenmelidir veya Lombok kullanıyor iseniz @NonNull notasyonunu kullanınız. Lombok hakkında yazıyı okumak için tıklayınız.

Java 8 ile gelen Optional özelliğini kullanın

Bu can sıkıcılığını ortadan kaldırmak için Java 8 ile beraber Optional sınıfı gelmiştir. Optional sınıfını anlatan ayrı bir yazı paylaşmıştım buradan okuyabilirsiniz.

 

Kaynaklar

Beğenebileceğiniz Diğer Yazılar

3 Yorum

  1. Esra dedi ki:

    Harikaa olmuşşş

  2. admin dedi ki:

    Çok teşekkürler Esra Hanım

  3. Mehmet dedi ki:

    Çok işime yaradı. Güzel anlatım olmuş. Devamını bekliyoruz

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir