27 Ekim 2022 Perşembe

Lambda ve Checked Exception

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