2015-09-17 3 views
0

В частности, какие конструкторы должны быть переопределены, чтобы квалифицировать исключение как chainable?Как написать Chained Exception Java классы

Throwable(Throwable cause), Throwable(String message, Throwable cause), или оба?

Ресурсы:

http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html https://docs.oracle.com/javase/tutorial/essential/exceptions/chained.html


В следующем примере показано, как использовать цепочечную исключение .:

try { 

} catch (IOException e) { 
    throw new SampleException("Other IOException", e); 
} 
+1

Определить «цепочки»? – fge

+1

Какой бы вам ни понадобился. –

+0

Человек, которого вы, ребята, быстро ... обновил тему и добавил некоторый контекст к вопросу. – yegeniy

ответ

1

мутноватый, что вы имеете в виду под «цепной " Вот.

Учитывая ссылки, которые вы указали, я предполагаю, что вы имеете в виду, что Throwable имеет в качестве причины еще один Throwable.

В этом случае у вас нет выбора, кроме как использовать соответствующий конструктор; например:

Другое, менее известное решение, но существующее с Java 7, является «подавлением» исключения. См. this link.

Это означает, что вы должны сначала определить, что вы подразумеваете под «цепными исключениями». Исключение, по своей природе, в значительной степени «окончательно»; необходимость встраивания исключений в другие исключения редка, но не неслыханная (например, для подавленных исключений, см., например, here)

Итак, прежде всего укажите свой прецедент!

+0

Очень круто о подавленных исключениях. Благодарю. Таким образом, мы можем использовать любой из этих двух конструкторов для получения [цепочки исключений] (https://docs.oracle.com/javase/tutorial/essential/exceptions/chained.html) таким образом, что " getCause() 'возвращает исключение, вызвавшее текущее исключение, и' initCause() 'устанавливает причину текущего исключения." – yegeniy

+1

Не совсем. Если вы подавите исключение, это не будет рассматриваться как «причина». На данный момент я считаю, что лучший способ - экспериментировать и посмотреть, что лучше для вас. Лично, с момента появления исключенных исключений я редко вижу необходимость 'initCause()', но ваш пробег может отличаться;) – fge