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

4 ответов


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

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

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

вы должны поставить 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() является плохим кандидатом на выбрасывание исключений только для всего этого дополнительного шаблона


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

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.


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

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