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