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
для каждого вызова.