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

Как игнорировать исключения в 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
}

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

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

ЭТО СЛУЧАЯ, КОГДА Я НЕ УКАЗАНА ОБ ИСКЛЮЧЕНИЯХ (пожалуйста, не используйте универсальные количественные утверждения типа "вы никогда не должны игнорировать исключения" ). Я устанавливаю значения некоторого объекта. Когда я представляю значения пользователю, я все равно выполняю нулевые проверки, поэтому на самом деле не имеет значения, выполняется ли какая-либо из строк кода.

4b9b3361

Ответ 1

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

Если вы используете 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));

Ответ 2

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

Используйте слово ignore после ключевого слова Exception.

Ответ 3

Вы не можете игнорировать исключение в 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);

Ответ 4

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

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

Ответ 5

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

Ответ 6

IntelliJ Idea IDE предлагает переименовать переменную в ignored

когда он не используется.

Это мой пример кода.

try {
    messageText = rs.getString("msg");
    errorCode = rs.getInt("error_code");
} catch (SQLException ignored) { }