Проверенные исключения в Java не так уж плохи. Конечно, ADT могут быть лучшим вариантом для Scala, но в Java проверенные исключения имеют свое место, и аргумент аккуратного кода является просто бессмысленным бессмысленным, независимо от того, сколько блогов повторялось это. В основном это говорит о том, что вы должны с радостью игнорировать серьезные и, возможно, исправимые условия, которые могут возникнуть в вашей системе, потому что система винтового типа, красивый код делает вашу систему автоматически надежной. Такое рассуждение также объясняет, почему так много Java-кодеров добровольно переносят свой код в XML (Spring, Maven и т. Д. Я скучаю по хорошему Хотя здесь часть).
Причина отсутствия проверенных исключений в Scala, приведенная М. Одерским ниже http://www.scala-lang.org/old/node/8787.html , неудивительно отличается и имеет смысл.
Проблема с проверенными исключениями лучше всего демонстрируется методом map в списках:
def map[B](f: A => B): List[B]
Как аннотировать карту с помощью @throws? Если карта сама по себе не получает аннотацию @throws, то, вероятно, вы не сможете передать ей функцию, которая имеет @throws. Это вводит громоздкие ограничения и различия в способах использования карты. Было бы лучше, если бы мы могли как-то заявить, что карта генерирует все исключения, которые выдает ее аргумент функции. Есть некоторые системы эффектов, которые могут выразить это, но пока что все обозначения, которые я видел, слишком тяжелые.
Лукас Ритц (Lukas Rytz) проводит исследование легких систем эффектов, которые можно использовать для краткого и точного выражения типа карты и других общих функций. Это исследование, поэтому в настоящее время неясно, в какой степени мы добьемся успеха и сколько из этого может быть вложено в Scala. В идеале, мы сможем добавить его в какой-то момент в качестве необязательной системы типов. Но слишком рано делать конкретные прогнозы.
ура
Не уверен, но я думаю, что лямбды Java 8 также ограничены непроверенными исключениями.Методы в большинстве (всех?) Новых функциональных интерфейсов в JDK 8 ( java.util.function.*
) также не объявляют непроверенные исключения.