Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #26255

Re: unnecessary code in Oracle example?

From Daniel Pitts <newsgroup.nospam@virtualinfinity.net>
Newsgroups comp.lang.java.programmer
Subject Re: unnecessary code in Oracle example?
References <ydnr4bujt72.fsf@shell.xmission.com>
Message-ID <u6h5u.69447$yx6.64233@fx26.iad> (permalink)
Date 2013-10-09 11:19 -0700

Show all headers | View raw


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.

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

unnecessary code in Oracle example? Jim Janney <jjanney@shell.xmission.com> - 2013-10-09 10:38 -0600
  Re: unnecessary code in Oracle example? Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-10-09 11:19 -0700
    Re: unnecessary code in Oracle example? ram@zedat.fu-berlin.de (Stefan Ram) - 2013-10-09 19:04 +0000
    Re: unnecessary code in Oracle example? Jim Janney <jjanney@shell.xmission.com> - 2013-10-09 13:08 -0600
      Re: unnecessary code in Oracle example? markspace <markspace@nospam.nospam> - 2013-10-09 12:27 -0700
        Re: unnecessary code in Oracle example? Jim Janney <jjanney@shell.xmission.com> - 2013-10-09 14:21 -0600
          Re: unnecessary code in Oracle example? markspace <markspace@nospam.nospam> - 2013-10-09 14:56 -0700
            Re: unnecessary code in Oracle example? Jim Janney <jjanney@shell.xmission.com> - 2013-10-09 20:56 -0600
              Re: unnecessary code in Oracle example? Arivald <NOSPAMarivald@interia.pl> - 2013-10-10 06:42 +0200
                Re: unnecessary code in Oracle example? Sebastian <news@seyweiler.dyndns.org> - 2013-10-10 07:47 +0200
                Re: unnecessary code in Oracle example? Arivald <arivald_@AT_interia_DOT_.pl> - 2013-10-10 10:26 +0200
                Re: unnecessary code in Oracle example? Jim Janney <jjanney@shell.xmission.com> - 2013-10-10 08:47 -0600
    Re: unnecessary code in Oracle example? Robert Klemme <shortcutter@googlemail.com> - 2013-10-09 21:11 +0200
      Re: unnecessary code in Oracle example? cuzdav@gmail.com - 2013-10-10 08:49 -0700

csiph-web