Вложенное исключение против современных (Java SE 7) исключений
Вопрос
Каковы преимущества и недостатки исключений с контекстом по сравнению с вложенными исключениями?
Почему я забочусь
Как разработчик, который не имеет опыта работы с Java или знает его, я наткнулся на возможную возможность обновить обработку исключений в проекте с открытым исходным кодом, но я хочу убедиться, что внесенные изменения будут полезны.
Рассматриваемый проект - ddlutils. В настоящее время он использует org.apache.commons.lang.exception, который гласит:
"Предоставляет функциональность" Вложенное исключение "в стиле JDK 1.4 для пользователей предыдущих версий Java".
Текущая версия Commons Lang (3.1 на момент написания статьи) использует org.apache.commons.lang3.exception, в котором говорится:
"Содержит концепцию исключения с контекстом, то есть такое исключение будет содержать карту с ключами и значениями. Это обеспечивает простой способ передачи ценной информации о состоянии во время исключения в полезной форме вызывающему процессу".
1 ответ
Обсуждая это, вы должны знать, что JDK1.4 выпущен около 10 лет назад. Он изобрел цепочку исключений, которая просто означает, что у вас есть конструктор, который принимает исключение причины. А затем печатается хорошая трассировка составного стека для всего этого. До JDK1.4 в JDK существовало много таких реализаций, и они были объединены в одно непротиворечивое решение. Теперь то, что сделал Лангс, - это предоставить некоторые базовые классы симлара, чтобы донести эту идею до старых JDK. Однако так как многое произошло:
- JDK 1.3 период общественного обслуживания закончился
- JDK 1.4 период общественного обслуживания закончился
- JDK 5 период общественного обслуживания закончился
- и теперь период публичной поддержки JDK 6 подходит к концу.
Так что просто никто больше не интересуется "предыдущими версиями JDK 1.4".
Теперь, с другой стороны, это исключение с контекстом не имеет ничего общего с любой версией JDK. Это опять-таки базовые классы для исключений, но в нем есть карта для размещения вещей. Обычно это реализуется с помощью специальных типов исключений, имеющих дополнительные поля. Это тип безопасно, красиво и чисто. Наличие карты на каждое исключение означает никогда не знать, что будет на этой карте. Я не могу думать ни о какой выгоде, которую это обеспечивает. Так что, если у вас нет действительно хорошего плана использовать его, я бы не рекомендовал его.