Как игнорировать исключения в Java

у меня есть следующий код:

TestClass test=new TestClass();
test.setSomething1(0);  //could, but probably won't throw Exception
test.setSomething2(0);  //could, but probably won't throw Exception

Я хотел бы выполнять: test.setSomething2(0); даже если test.setSomething(0) (строка над ним) выдает исключение. Есть ли способ сделать это иначе, чем:

try{
   test.setSomething1(0);
}catch(Exception e){
   //ignore
}
try{
   test.setSomething2(0);
}catch(Exception e){
   //ignore
}

у меня много теста.что-то происходит подряд, и все они могут делать исключения. Если они это сделают, я просто хочу пропустить эту строку и перейти к следующей.

для уточнения, мне все равно, если он выдает исключение, и я не могу редактировать исходный код кода что вызывает это исключение.

это случай, когда меня не волнуют исключения (пожалуйста, не используйте универсально количественные утверждения, такие как "вы никогда не должны игнорировать исключения"). Я устанавливаю значения некоторого объекта. Когда я представляю значения пользователю, я все равно выполняю проверки null, поэтому на самом деле не имеет значения, выполняется ли какая-либо из строк кода.

5 ответов


Я бы серьезно сомневался в здравомыслии любого тестового кода, который игнорирует исключения из тестируемого кода. При условии, что вы знаете, что делаете... невозможно принципиально игнорировать брошенное исключение. Лучшее, что вы можете сделать, это минимизировать шаблон, который вам нужен для обертывания кода исключения.

Если вы находитесь на Java 8, вы можете использовать это:

public static void ignoringExc(RunnableExc r) {
  try { r.run(); } catch (Exception e) { }
}

@FunctionalInterface public interface RunnableExc { void run() throws Exception; }

затем, и подразумевая статический импорт, ваш код становится

ignoringExc(() -> test.setSomething1(0));
ignoringExc(() -> test.setSomething2(0));

try {
 // Your code...
} catch (Exception ignore) { }

использовать слово ignore после Exception ключевое слово.


к сожалению, нет, нет, и это намеренно. При правильном использовании исключения не следует игнорировать, поскольку они указывают на то, что что-то не сработало и что вы, вероятно, не должны продолжать свой обычный путь выполнения. Полностью игнорирование исключений является примером анти-шаблона "подметать под ковер", поэтому язык не поддерживает это так легко.

Возможно, вам стоит посмотреть, почему TestClass.setSomething бросает исключения. Это все, что угодно вы пытаетесь "проверить" действительно будет действительным, если куча методов сеттера не работала правильно?


вы не можете игнорировать исключение в Java. Если метод объявляет возможность бросить что-то, это потому, что что-то важное не может быть сделано, и ошибка не может быть исправлена конструктором методов. Поэтому, если вы действительно не хотите упростить свою жизнь, инкапсулируйте вызов метода в какой-то другой метод, например :

class MyExceptionFreeClass {
  public static void setSomething1(TestClass t,int v) {
    try {
      t.setSomething1(v);
    } catch (Exception e) {}
  public static void setSomething2(TestClass t,int v) {
    try {
      t.setSomething2(v);
    } catch (Exception e) {}
}

и вызывать его, когда вам это нужно:

TestClass test=new TestClass();
MyExceptionFreeClass.setSomething1(test,0);
MyExceptionFreeClass.setSomething2(test,0);

вы не должны игнорировать исключения. Ты должен с ними разобраться. Если вы хотите сделать тестовый код простым, добавьте блок try-catch в свои функции. Самый лучший способ игнорировать исключения-предотвратить их с помощью правильного кодирования.