I have a variable that is not supposed to change its value after it's been initialized, so I want to define it as a final variable.
the problem is that the variable has to be initialized inside a try block, so I get the following troubles:
I have the following code:
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);
}
If I declare the variabale as final, without initializing it to null, I get a 'The local variable conn may not have been initialized' on the finally block. On the other hand, if I declare it final and initialize it to null, I get the error 'The final local variable conn cannot be assigned' in the try block.
EDIT: after lxx answer, I came with this version
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);
}
So this should be the way to do it?
--
Lesson learned:
I think that the correct answer to the question is the one that lxx gave, but in this case I guess that the cons of declaring the variable final outweights it's benefits...
--
EDIT: found two questions on stack overflow about when to use final
When should one use final for method parameters and local variables?