Изменить необработанное исключение автоматически генерируемого кода catch в Eclipse?
Если у меня есть необработанное исключение в Java, Eclipse предлагает мне два варианта: (1) Добавить объявление бросков и (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);
}
это возможно?
обновление
почему так любят менять тему люди???
Если исключение улавливается и печатается, его также не нужно больше ловить. Мне нравится мое приложение для сбоя, если я забуду обработать исключение по ошибке. Поэтому мне нравится переосмысливать его по умолчанию.
4 ответов
Да, вы можете изменить код по умолчанию, добавленный Eclipse.
- в настройках перейдите в раздел Java>Стиль Кода>Шаблоны Кода.
- под код выберите поймать блок тела.
- Нажмите кнопку Изменить, чтобы изменить код. Когда закончите, нажмите OK.
рассмотрите возможность добавления комментария TODO в блок catch по умолчанию. Например, значение по умолчанию включает в себя:
// ${todo} Auto-generated catch block
лично я использую общую идиому независимо от фактического проверенного типа исключения, вы можете использовать Eclipse вместо этого в качестве шаблона:
try {
...
}
catch (RuntimeException e) { throw e; }
catch (Exception e) { throw new RuntimeException(e); }
дело в том, чтобы обернуть весь блок кода, а не отдельно каждую строку, которая может вызвать исключение. Блок может выбросить любое количество проверенных и непроверенных исключений, и это позволит непроверенным исключениям пройти через невредимыми, и проверенные исключения будут обернуты.
если вы повторно бросаете свое исключение из предложения catch, то вам придется обрабатывать метод, который вызвал ваш текущий метод. Но если вы обернете свое исключение в RuntimeException
, вам не нужно будет обрабатывать его. Но зачем тебе это?
Я имею в виду, почему не просто: -
try {
myfunction();
} catch (MyUnhandledException e) {
throw e;
}
потому что в вашем коде в основном вы обертываете A может быть checked exception
на unchecked one
. Если я предполагаю ваш MyUnhandledException
as checked exception
.
, а также обратите внимание, что если вы не следуя этому подходу, вам все равно нужно declare it
на thrown
в своем throws clause
.
если вы просто хотите сделать так, как вы делаете, то и он будет работать нормально. Вы можете изменить Eclipse setting
согласно ответу @Andy's.
но лучше бы посмотреть на ваш дизайн. Почему метод переопределен, вызывая исключение, не объявленное в вашем overriden
метод. Наверное, что-то не так, это нужно исправить.
вы, вероятно, знаете об этом... но если вы хотите избавиться от всех надоедливых помех и раздражения от проверенных исключений, почему бы просто не добавить 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
}