Re: unnecessary code in Oracle example?
On 10/9/13 9:38 AM, Jim Janney wrote:
I'm reading up on Java 7's try-with-resource statement and looking at
the tutorial at
http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
which includes the following code:
static String readFirstLineFromFileWithFinallyBlock(String path)
throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
As a matter of habit, I always write that pattern as
static String readFirstLineFromFileWithFinallyBlock(String path)
throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
}
on the theory that if you reach that point br can never be null, so the
test is both redundant and confusing. On the other hand, I might be
wrong. Is there a reason to test for null in the finally block?
You are correct for this case, the other case comes from a block which
uses multiple resources.
MyResource r1 = null;
MyResource r2 = null;
try {
r1 = openResource1();
r2 = openResource2();
} finally {
if (r1 != null) r1.close();
if (r2 != null) r2.close();
}
Of course, some close() methods can throw, which could break this idiom
too. This is one reason why C++ forbids destructors from throwing.