Поскольку лямбда-выражения не всегда вычисляются сразу.
Пусть у вас есть это:
public Supplier<String> giveMeASupplier() throws Exception {
return () -> someMethodThatThrowsCheckedException()
}
По вашему мнению, вышесказанное сработает. Правильно?
Теперь другим способом я могу сделать это:
Suppler<String> supplier = null;
try {
supplier = giveMeASupplier() // no exception is thrown here.
} catch (Exception ex) {
ex.printStackTrace();
}
if (supplier != null) {
System.out.println(supplier.get()); // this might throw an exception! Yet it's not in a try...catch!
}
Как вы думаете, что произойдет, если supplier.get()
сгенерирует исключение? Есть что-нибудь, чтобы поймать это? Нет. Если каким-то образом блок catch
за несколько строк до запуска будет запущен, то это будет действительно странно.