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

Java: Try-Catch-Continue?

Скажем, я могу набор утверждений:

try {
  String a = getProperty("a");
  String b = getProperty("b");
  String c = getProperty("c");
} catch(Exception e) {

}

Теперь давайте скажем, что свойство b не найдено, а функция генерирует исключение. В этом случае, как я могу просто продолжить или, возможно, установить b в значение null, не создавая блок try-catch для каждого свойства? Я имею в виду, a, b, c существуют, но иногда они могут вообще не обнаруживаться, в течение которых генерируется исключение.

4b9b3361

Ответ 1

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

Если у вас есть много этих свойств для извлечения, возможно, было бы проще написать вспомогательный метод для использования:

String getPropertySafely(String key) {
   try {
      return getProperty(key);
   } catch (Exception e) {
      return null;
   }
}

Ответ 2

Вы должны поставить try-catch вокруг каждого утверждения. Нет продолжения (например, в блоках ON ERROR ... RESUME в VB). Вместо:

String a = null;
try {
  a = getProperty("a");
} catch(Exception e) {
  ...
}
String b = null;
try {
  b = getProperty("b");
} catch(Exception e) {
  ...
}
String c = null;
try {
  c = getProperty("c");
} catch(Exception e) {
  ...
}

вы можете написать:

public String getPropertyNoException(String name) {
  try {
    return getProperty(name);
  } catch (Exception e) {
    return null;
  }
}

Лично я думаю, что getProperty() - плохой кандидат для исключения исключений только для всех необходимых дополнительных шаблонов

Ответ 3

Так как вы используете одну и ту же функцию каждый раз, когда можете добавить это в цикл:

String[] abc = new String[3];
String[] param = {"a", "b", "c"};
for (int i = 0; i < 3; i++) {
    try {
      abc[i] = getProperty(param[i]);
    } catch(Exception e) {

    }
}

но это скорее надуманно и будет полезно только для большого количества свойств. Я подозреваю, что вам придется просто написать 3 try-catch.

Ответ 4

Вы должны пересмотреть, как обрабатывается getProperty, если вы планируете использовать многие из них, потому что нет простого способа сделать это.

Вы можете использовать оператор finally, но для каждого вызова вам все равно нужен try-catch.