Giriş
Açıklaması şöyle. Yani lambda içinde checked exception fırlatılamz. Checked Excepiton'ları RuntimeException'a çevirerek durum kurtarılabiliyor.
...it is not possible to call a method that throws a checked exception from a lambda directly.Örnek
Elimizde şöyle bir kod olsun. Bu kod pek okunaklı değil.
Stream.of("...", "...", "...").map(it -> {try {return Class.forName(it);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}).forEach(System.out::println);
1. Lombok SneakyThrows şu anda lambda için kullanılamıyor.
2. Apache Commons Failable kullanılabilir.
3. Vavr kullanılabilir.
4. Bu kodu şu hale çevirebiliriz
var forNamer = new ForNamer()
Stream.of("...", "...", "...")
.map(forNamer::apply)
.forEach(System.out::println);
record ForNamer() implements Function<String, Class<?>> {
@Override
public Class<?> apply(String string) {
try {
return Class.forName(string);
} catch (ClassNotFoundException e) {
return null;
}
}
}
Hiç yorum yok:
Yorum Gönder