Proposal: Automatic Resource Management (original) (raw)

Joshua Bloch jjb at google.com
Mon Mar 9 16:27:29 PDT 2009


Vilya,

Thanks for the feedback. I am glad that you like the proposal.

On Mon, Mar 9, 2009 at 12:52 PM, Vilya Harvey <vilya.harvey at gmail.com>wrote:

The only thing in it I wasn't too sure about was having variable declarations inside the parentheses. It works well in the examples given, but I can think of a few cases where it gets a bit ugly: - using an anonymous class as an adapter to implement AutoCloseable when an existing class doesn't implement it; - using with a resource managing class which requires you to call a void connect() method or similar to actually get the resource, instead of grabbing it in the constructor. Both of these would be slightly better if expressions (i.e. references to existing variables) were allowed inside the parentheses. You can work around this under the existing proposal: AutoCloseable ac = ... ; try (AutoCloseable acRef = ac) { ... } but that seems (to me) to obscure the fact that ac will be closed afterwards even more than if ac was listed on it's own inside the parentheses.

The tradeoff is that allowing an expression in place of a declaration ups the odds of someone accidentally accessing a resource that's already closed. I could go either way on this.

     Josh


More information about the coin-dev mailing list