У меня есть переменная, которая не должна изменять ее значение после ее инициализации, поэтому я хочу определить ее как конечную переменную.
проблема в том, что переменная должна быть инициализирована внутри блока 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, я получаю "Локальная переменная conn, возможно, не была инициализирована" на блоке finally. С другой стороны, если я объявляю его окончательным и инициализирую его значением null, я получаю сообщение об ошибке "Конечная локальная переменная 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, но в этом случае я предполагаю, что минусы объявления переменных конечных перегрузок выгодны...
-
EDIT: найдено два вопроса о переполнении стека о том, когда использовать final
Когда следует использовать final для параметров метода и локальных переменных?
Использование "final" модификатор, когда это применимо в java.