У меня есть переменная, которая не должна менять свое значение после инициализации, поэтому я хочу определить ее как конечную переменную.
проблема в том, что переменная должна быть инициализирована внутри блока try, поэтому я получаю следующие проблемы:
У меня есть следующий код:
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, не инициализируя ее в null, я получаю ошибку 'The local variable conn may have not been initialized' в блоке finally. С другой стороны, если я объявляю ее final и инициализирую в null, я получаю ошибку 'The final local variable conn cannot be assigned' в блоке 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: нашел два вопроса на stack overflow о том, когда использовать final
Когда следует использовать final для параметров метода и локальных переменных?
Использование модификатора "final", когда это применимо в java