Java 8 : Optional Sınıfı

Her Java geliştiricisi NullPointerException istisnalarıyla uğraşmıştır. null değer ile karşılaşmak, ona karşı önlem almak herzaman için can sıkıcı olmuştur. Bu can sıkıcılığını ortadan kaldırmak için Java 8 ile beraber Optional sınıfı gelmiştir. Optional yapısı daha evvelden farklı dillerde bulunan bir özelliktir.

Optional türünden nesneler, null olma ihtimali olan nesneleri kolay yönetmek için oluşturulmuştur.

Varsayalım ki, verilen kullanıcı adına göre veri listemizde kullanıcıyı bulan bir metodumuz olsun.

Bu metodu çağıran sınıfımızda şu şekilde olsun

Eğer ” Koray ” adında bir kullanıcımız yoksa burada null olan user nesnesinin getName metodunu çağırdığımızda NullPointerException fırlatacak ve program kırılacaktır.

Şimdi aynı senaryo üzerinden Optional kullanarak NullPointerException’dan nasıl kaçınacağız görelim.

User sınıfı :

UserDao sınıfı :

Optional Nesnesi Nasıl Oluşturulur

Üç şekilde Optional nesnesi oluşturabiliriz. Kullanıcının adına göre kullanıcımızı çekip optional oluşturma işlemlerine başlayalım.

  • Boş optional nesnesi oluştururak

  • Null olmayan değer ile optional nesnesi oluşturarak

Optional.of () öğesine gönderilen değer null ise , NullPointerException’ı hemen fırlatır ve Optional nesnesi oluşturulmaz.

  • Null olabilecek veya olmayabilecek bir değer ile optional nesnesi oluşturarak

 

Optional Kullanımları

 

get()

Optional içerisindeki değeri verir. Dikkat edilmesi gereken husus bu metodu kesinlikle ve kesinlike optional içerisinde değer varsa kullanılmalıdır yoksa NoSuchElementException fırlaması kaçınılmazdır. Bu sebeple en azından isPresent metodu ile kontrol edip akabinde çağırmak en mantıklısıdır.

isPresent (Var mı ?)

Present kelime anlamı olarak da mevcut olduğundan mevcut mu diye kontrol eder. Eğer optional içerisinde değer null değilse true döndürür diğer durumlarda false döndürür.

ifPresent (Varsa yap)

Eğer bir Optional içerisinde değer varsa (null değilse) bir işin yapılması isteniyorsa ifPresent metodu kullanılabilir. ifPresent metodu Consumer fonksiyonel arayüzü türünden bir nesne kabul etmektedir.

map (Dönüştürme)

Optional nesnelerinin sarmaladığı veriler üzerinde dönüşüm yapar.

filter (Filtreleme)

Optional nesnelerinin sarmaladığı veriler üzerinde süzme işlemi de yapılabilmektedir.

orElse (Varsa al, yoksa bunu al)

orElse metodu daha çok ternary (üçlü) şart ihtiyacı olduğu durumlarda ihtiyaç duyulabilir. Daha akıcı bir geliştirim deneyimi sunar.

orElseGet (Varsa al, yoksa üret)

Bu metod orElse metoduna çok benzer, fakat orElseGet metod parametresi olarak Supplier fonksiyonel arayüzü türünden nesne kabul eder.

orElseThrow (Varsa al, yoksa exception fırlat)

Optional nesnesi bir değeri içeriyorsa (null olmayan) o değeri döndürür, null ise de sağlanan istisna nesnesini fırlatır. orElseThrow metodu Supplier türünden bir nesne kabul eder.

Optional’ın özellikleri bu kadar. Tüm özellikleri çağıran kodun tamamı şu şekildedir. Kendi bilgisayarınızda deneyerek daha çabuk öğreneceğinizden eminim.

Kaynaklar

Beğenebileceğiniz Diğer Yazılar

2 Yorum

  1. Pelin dedi ki:

    Java8 ile gelen yenilikler arasında öğrenilmesi gereken şeylerden birisi. Bu güzel, aydınlatıcı ve örneklerle dolu yazı için teşekkürler hocam 🙂

  1. 20 Ekim 2018

    […] Java 8 : Optional Sınıfı […]

Bir cevap yazın

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