Подтвердить что ты не робот

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

Почему так любят менять тему людей???

Если исключение выловлено и распечатано, также не нужно больше его ловить. Мне нравится мое приложение для сбоя, если я забыл обработать исключение по ошибке. Таким образом, мне нравится повернуть его по умолчанию.

4b9b3361

Ответ 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
}