Sobes.tech
Middle

Optional sınıfı hakkında ne biliyorsunuz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Optional<T> bir içerik sınıfıdır ve ya T türünde boş olmayan bir değer içerebilir ya da boş olabilir. Java 8'e eklenmiştir ve null işaretçileri sorununu çözmek için kullanılır.

Ana metodlar:

  • of(T value): Boş olmayan bir Optional oluşturur. Değer null ise NullPointerException fırlatır.
  • ofNullable(T value): Eğer değer varsa boş olmayan bir Optional oluşturur, yoksa boş bir Optional oluşturur.
  • empty(): Boş bir Optional oluşturur.
  • isPresent(): Değer mevcutsa true, değilse false döner.
  • isEmpty(): Değer yoksa true, varsa false döner (Java 11 ile eklenmiştir).
  • get(): Değer varsa döner, yoksa NoSuchElementException fırlatır.
  • orElse(T other): Değer varsa döner, yoksa other döner.
  • orElseGet(Supplier<? extends T> other): Değer varsa döner, yoksa Supplier'ın sonucunu döner. Maliyetli other için orElse(T other) yerine tercih edilir.
  • orElseThrow(Supplier<? extends X> exceptionSupplier): Değer varsa döner, yoksa exceptionSupplier'ın sağladığı istisnayı fırlatır.

NullPointerException'dan kaçınmak için kullanım örneği:

// Yerine
User user = findUserById(userId);
if (user != null) {
    String email = user.getEmail();
    // ...
}

// Optional kullanabilirsiniz
Optional<User> userOptional = findUserByIdOptional(userId);
userOptional.ifPresent(user -> {
    String email = user.getEmail();
    // ...
});

orElse ve orElseGet karşılaştırması:

// Her iki çağrı da optionalUser boşsa DefaultUser döner
// Ama `orElse` durumunda, `new DefaultUser()` her zaman çağrılır,
// hatta optionalUser bir değer içeriyor olsa bile
User user1 = optionalUser.orElse(new DefaultUser());

// `orElseGet` durumunda, `new DefaultUser()` yalnızca
// optionalUser boşsa çağrılır
User user2 = optionalUser.orElseGet(() -> new DefaultUser());

Optional, kodu daha okunabilir ve güvenli hale getirir, değerin eksik olabileceğini açıkça gösterir. Sınıf alanları veya metod parametreleri için kullanılmamalıdır, eğer eksik değer istisnai bir durumsa.