Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Цепочечное Средство Исключения

Коду Java свойственно поймать одно исключение и бросить другого:

try {
    ...
} catch(YourException e) {
    throw new MyException();
}

К сожалению, информация, содержавшаяся в "причинном исключении" (YourException в примере выше), обычно теряется, который значительно усложняет отладку. Распознавая эту проблему, разработчики иногда создают оперативные механизмы, чтобы позволить определенным "обернутым исключениям" содержать второе исключение. Средство доступа обычно обеспечивается, чтобы извлечь содержавшее исключение. Такие механизмы иногда известны как "средства объединения в цепочку исключения", поскольку они позволяют произвольным цепочкам исключений быть созданными, когда содержавшие исключения являются, непосредственно, обернутыми исключениями.

Есть много преимуществ для объединения всех этих средств. Руководитель среди них: (1) Мы гарантируем, что любой, кто хочет записать факт, что одно исключение, вызванное, другой может сделать так, независимо от того, каковы исключения. (2), обеспечивая общий API, чтобы записать факт, что одно исключение, вызванное другой, мы ослабляем эту задачу, делая это более вероятно, что программисты позаботятся делать это. (3), обеспечивая общий API, чтобы получить доступ к причинным исключениям, мы значительно увеличиваем вероятность, что эта информация будет сделана доступной для тех, кто нуждается в ней. Фактически, предложенный механизм печатает всю "причинную цепочку" как часть стандартного следа стека, гарантируя, что существующие ранее программы предоставят эту информацию без дополнительного усилия со стороны их авторов.

Чтобы решить эти проблемы, мы добавили два новых метода к Throwable, getCause() и initCause(Throwable), и двум новым конструкторам, Throwable(Throwable) и Throwable(String, Throwable). Другие классы исключений "общего назначения" (как Exception, RunTimeException и Error) были так же снабжены оборудованием с (Throwable) и  (String, Throwable), конструкторы. Однако, даже исключения без таких конструкторов будут применимы как "обернутые исключения" через метод initCause.

Реализация Throwable.printStackTrace была изменена, чтобы вывести на экран следы для всей причинной цепочки исключений. Новый метод getStackTrace обеспечивает программируемый доступ к трассировочной информации стека, обеспеченной printStackTrace.

Все обернутые исключения платформы будут retrofitted, чтобы поддерживать новое средство (в дополнение к их API наследства).


Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами