У меня есть переменная, которая не должна изменять свое значение после ее инициализации, поэтому я хочу определить ее как конечную переменную.
проблема в том, что переменная должна быть инициализирована в попыткеблок, поэтому я получаю следующие проблемы:
У меня есть следующий код:
Connection conn = null;
try {
conn = getConn(prefix);
[...do some stuff with conn...]
} catch (Exception e) {
throw new DbHelperException("error opening connection", e);
} finally {
closeConnection(conn);
}
Если я объявляю переменную как final, не инициализируя ее как ноль, я получаю 'Localпеременная conn, возможно, не была инициализирована 'в блоке finally.С другой стороны, если я объявляю его окончательным и инициализирую его нулевым, я получаю ошибку «Конечная локальная переменная conn не может быть назначена» в блоке try.
EDIT: после ответа lxx я пришел сэта версия
try {
final Connection conn = conn = getConn(prefix);
try {
return selectAll(conn, sql, params);
} catch (Exception e) {
throw new DbHelperException("error executing query", e);
} finally {
closeConnection(conn);
}
} catch (Exception e) {
throw new DbHelperException("error opening connection", e);
}
То есть, как это сделать?
-
Извлеченный урок:
Я думаю, что правильный ответна вопрос тот, который дал lxx, но в этом случае я предполагаю, что минусы объявления переменной final перевешивают ее преимущества ...
-
EDIT: найдено два вопроса напереполнение стека о том, когда использовать final
Когда следует использовать final для параметров метода и локальных переменных?
Использование модификатора "final", когда это применимо в Java