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 birOptionaloluşturur. DeğernulliseNullPointerExceptionfırlatır.ofNullable(T value): Eğer değer varsa boş olmayan birOptionaloluşturur, yoksa boş birOptionaloluşturur.empty(): Boş birOptionaloluşturur.isPresent(): Değer mevcutsatrue, değilsefalsedöner.isEmpty(): Değer yoksatrue, varsafalsedöner (Java 11 ile eklenmiştir).get(): Değer varsa döner, yoksaNoSuchElementExceptionfırlatır.orElse(T other): Değer varsa döner, yoksaotherdöner.orElseGet(Supplier<? extends T> other): Değer varsa döner, yoksaSupplier'ın sonucunu döner. MaliyetliotheriçinorElse(T other)yerine tercih edilir.orElseThrow(Supplier<? extends X> exceptionSupplier): Değer varsa döner, yoksaexceptionSupplier'ı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.