Измените необработанное исключение, созданное сгенерированным кодом catch в Eclipse?
Если у меня есть необработанное исключение в Java, Eclipse предлагает мне два варианта: (1) добавить объявление throws и (2) объединить с try/catch.
Если я выберем (2), он добавит код
try {
myfunction();
} catch (MyUnhandledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Я хочу изменить это на
try {
myfunction();
} catch (MyUnhandledException e) {
throw new RuntimeException(e);
}
Возможно ли это?
UPDATE
Почему так любят менять тему людей???
Если исключение выловлено и распечатано, также не нужно больше его ловить. Мне нравится мое приложение для сбоя, если я забыл обработать исключение по ошибке. Таким образом, мне нравится повернуть его по умолчанию.
Ответы
Ответ 1
Да, вы можете изменить код по умолчанию, добавленный Eclipse.
- В настройках перейдите в Java > Стиль кодa > Шаблоны кода.
- В разделе "Код" выберите "Тело блока Catch".
- Нажмите кнопку "Изменить", чтобы изменить код. По завершении нажмите
OK.
Рассмотрим добавление комментария TODO в блоке catch по умолчанию. Например, значение по умолчанию включает в себя:
// ${todo} Auto-generated catch block
Ответ 2
Лично я использую общую идиому независимо от фактического проверенного типа исключения, вы можете использовать Eclipse в качестве шаблона:
try {
...
}
catch (RuntimeException e) { throw e; }
catch (Exception e) { throw new RuntimeException(e); }
Дело в том, чтобы обернуть весь блок кода, а не отдельно каждую строку, которая может вызвать исключение. Блок может выкинуть любое количество проверенных и непроверенных исключений, и это позволит исключить неконтролируемые исключения из невредимых, и проверенные исключения будут обернуты.
Ответ 3
Если вы повторно бросаете свое исключение из предложения catch, тогда вам придется обрабатывать метод, вызывающий ваш текущий метод. Но если вы закроете свое исключение в RuntimeException
, вам не придется его обрабатывать. Но зачем вам это делать?
Я имею в виду, почему не просто: -
try {
myfunction();
} catch (MyUnhandledException e) {
throw e;
}
Потому что, в вашем коде, в основном вы обертываете, может быть checked exception
в unchecked one
. Если я принимаю ваш MyUnhandledException
как checked exception
.
Также обратите внимание, что если вы будете следовать этому подходу, вам все равно нужно declare it
быть thrown
в throws clause
.
Если вы просто хотите сделать то, как вы это делаете, то он будет работать нормально. Вы можете изменить Eclipse setting
в соответствии с ответом @Andy.
Но было бы лучше посмотреть на ваш дизайн. Почему метод отменяет выброс исключения, не объявленного в вашем методе overriden
. Возможно, что-то не так, что нужно исправить.
Ответ 4
Вы, наверное, знаете об этом... но если вы хотите избавиться от всех надоедливых помех и раздражений от проверенных исключений, почему бы просто не добавить throws Exception
к каждому отдельному методу?
В случае метода переопределенного интерфейса этот тип шаблона затем можно использовать:
@Override
public void close() throws IOException {
try {
_close();
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
private void _close() throws Exception {
// ... closing ops
}