Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!feeder.erje.net!eu.feeder.erje.net!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Jim Janney Newsgroups: comp.lang.java.programmer Subject: Re: unnecessary code in Oracle example? Date: Wed, 09 Oct 2013 13:08:57 -0600 Organization: a plan in my flaw Lines: 38 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: mx05.eternal-september.org; posting-host="c75a2e3068ccf6c98395286f3e40b97d"; logging-data="11729"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18fDnPRei1jg0f5oQURDRFh" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux) Cancel-Lock: sha1:b05LQhIV7AsvZo0+BseSwAoZpOI= sha1:bwZG4QWbHo3ShkEu8Q7l5+HSpak= Xref: csiph.com comp.lang.java.programmer:26257 Daniel Pitts writes: > 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. Thanks. But that looks like a good idiom to avoid. I prefer MyResource r1 = openResource(); try { MyResource r2 = openResource2(); try { // do something } finally { r2.close(); } } finally { r1.close(); } Not as pretty syntactically, perhaps, but much clearer semantically. -- Jim Janney