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