Необходимо различать общий код и более конкретный код.
Рассмотрим возвращаемые типы функций как аналогию. Если вы пишете класс, такой как «ArrayList», вы хотите, чтобы он был очень общим, поэтому параметры и возвращаемые значения часто являются общими объектами. Но когда вы пишете код, более специфичный для вашего приложения, например, функцию «getRetiredEmployees», возвращать Object будет очень плохой идеей. Скорее всего, вы захотите вернуть Employee [] или что-то в этом роде.
Итак, такая среда, как Spring, будет ожидать универсальных исключений, потому что она не имеет ни малейшего представления, какие исключения будет выдавать ваше конкретное приложение. Авторы Spring не могут знать, что вы собираетесь вызвать исключение EmployeeNotInSpecifiedDepartment или что-то еще. Как они могли? Но если вы пишете функцию sendPensionChecks и вызываете getRetiredEmployees, вы можете ожидать, что вам будут известны конкретные исключения, которые может выдавать эта функция, и что вы должны сделать для их обработки.
Клинт Миллер говорит о том, что не знает, как можно расширить класс. Я признаю, что это проблема с конкретизацией ваших исключений. Но переход оттуда к «просто сделать все общее исключение» слишком легко бросить. Это все равно что сказать, что, поскольку кто-то когда-нибудь может расширить нашу функцию getRetiredEmployees, чтобы в некоторых случаях возвращать EmployeeSpouse вместе с Employee, то мы должны просто отказаться и сделать возвращаемый тип Object. Если это код, который вы используете для внутреннего использования, и вы управляете им, это не проблема: если вам нужно добавить новое исключение в функцию, добавьте его. Если это API, который вы публикуете для всего мира, тогда да, проблема гораздо сложнее. Я бы сказал, что общее решение состоит в том, чтобы попытаться рационально продумать, какие исключения имеют смысл, и включить их все, даже если они не все реализованы в настоящее время. Если один из ваших клиентов делает что-то совершенно неожиданное, ну, это проблема, на которую нет простого ответа.
Создание всего общего - не правильный ответ, потому что это делает все трудным для понимания, сложным для поддержания и трудным для проверки точности.