Обработка исключений из кода «Restricted» - PullRequest
0 голосов
/ 06 февраля 2012

Недавно я задал еще один вопрос, касающийся того, чтобы не использовать шаблонные исключения, когда они не нужны (или, точнее, обрабатываемая ошибка не нужна, поскольку приложение просто не может выжить, если ошибка вызывается в первую очередь).Я решил сделать выбор в пользу неконтролируемых ошибок в большинстве случаев, главным образом для удобства чтения.В других ситуациях у меня нет выбора, кроме как использовать большие, некрасивые блоки try.

Например, в одной ситуации я использую Apache Commons BeanUtilities класса MethodUtils, чтобы использовать интроспекцию для вызова метода в Object неизвестного типа.В этой ситуации я вижу, как я использую класс, который я не могу контролировать.Я вынужден следовать философии проверенных исключений и вылавливать 3 разных исключения каждый раз, когда я использую метод?Или есть способ обойти это?

SQL sql = null;
try {
    sql = (SQL) MethodUtils.invokeExactMethod(bean, "getSQL", (Object[])null);
} catch (NoSuchMethodException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
}

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

Сложный catch читаемость является очень распространенной проблемой.В Java 7 это может быть в более читаемой форме:

SQL sql = null;
try {
    sql = (SQL) MethodUtils.invokeExactMethod(bean, "getSQL", (Object[])null);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
    e.printStackTrace();
}
0 голосов
/ 06 февраля 2012

Помимо ответа Мерсенна, вы можете просто использовать общий базовый класс этих исключений в своем блоке catch:

SQL sql = null;
try {
    sql = (SQL) MethodUtils.invokeExactMethod(bean, "getSQL", (Object[])null);
} catch (Exception e) {
    e.printStackTrace();
}

Это поймает все три исключения. Если вы не планируете выполнять какие-либо конкретные меры для различных исключений, это подходящее решение. И это работает со всеми версиями JDK.

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