История изменений
Исправление vbr, (текущая версия) :
Проблема не в проверяемых исключениях, как таковых. Проблема в том, что их заабузили в стандартной библиотеке. Если бы они были исключительно как инструмент для пользовательского кода, а в библиотеках было бы принято использовать непроверяемые исключения, у меня претензий бы не было. Изредка кажется удобным заставить вызывающий код обработать исключение. Очень редко, но ситуацию такую представить можно.
А что касается лямбд - проблема не выглядит нерешаемой. Просто они немного забили. Но в целом - надо просто сделать так, чтобы код вроде
@FunctionalInterface
interface Function<T, R, E>
R apply(T arg) throws E;
}
Выводил тип E как, к примеру, IOException | SQLException
. Причём код выше уже работает для одного вида эксепшнов. А также вышеупомянутая концепция типа-объединения уже есть в языке в виде соответствующей catch-конструкции. То бишь в целом в языке уже все кирпичики есть, осталось только их соединить и проблема с лямбдами будет решена.
Исходная версия vbr, :
Проблема не в проверяемых исключениях, как таковых. Проблема в том, что их заабузили в стандартной библиотеке. Если бы они были исключительно как инструмент для пользовательского кода, а в библиотеках было бы принято использовать непроверяемые исключения, у меня претензий бы не было. Изредка кажется удобным заставить вызывающий код обработать исключение. Очень редко, но ситуацию такую представить можно.