Изменить необработанное исключение автоматически генерируемого кода 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.

  1. в настройках перейдите в раздел Java>Стиль Кода>Шаблоны Кода.
  2. под код выберите поймать блок тела.
  3. Нажмите кнопку Изменить, чтобы изменить код. Когда закончите, нажмите 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
}