Есть ли в Java концепция внутреннего исключения - PullRequest
18 голосов
/ 09 марта 2011

.Net исключение может содержать внутренние исключения?Я хочу знать, есть ли в Java похожая вещь или нет?

Ответы [ 4 ]

24 голосов
/ 09 марта 2011

Абсолютно - вы можете извлечь внутреннее исключение («причину»), используя Throwable.getCause().Чтобы создать исключение с причиной, просто передайте его в конструктор.(У большинства исключений есть конструктор, принимающий причину, где это имеет смысл.)

7 голосов
/ 09 марта 2011

Вы можете установить внутреннее исключение (AKA причина) двумя способами. Если вы создаете экземпляр исключения самостоятельно, передайте внутреннее исключение в конструктор (внешнего) исключения, например,

try {
    // some code that throws innerException
} catch (Exception innerException) {
    throw new OuterException(innerException);
}

С другой стороны, если внешнее исключение не имеет конструктора, который позволяет вам устанавливать внутреннее исключение, или вы сами не создаете экземпляр внешнего исключения, вы можете установить его с помощью

outerException.initCause(innerException);
5 голосов
/ 09 марта 2011

Начиная с Java 1.4, java.lang.Throwable имеет конструкторы, которые принимают в качестве параметра другой Throwable, и метод getCause(), который возвращает его. Практически все исключения в стандартном API и большинство из тех, что реализованы в других библиотеках, используют эту возможность.

1 голос
/ 09 марта 2011

Все исключения могут быть связаны в Java. Это означает, что вы можете выбросить исключение и предоставить другое исключение (на самом деле Throwable) в качестве причины создаваемого исключения. Посмотрите на Javadoc для исключения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...