Proposal: Automatic Resource Management

Neal Gafter neal at gafter.com
Tue Mar 3 23:56:29 PST 2009


On Tue, Mar 3, 2009 at 11:49 PM, Jeremy Manson <jeremy.manson at gmail.com> wrote:
> As a side note to this conversation, directed at any people who will
> think you can't have this feature with this proposal, regardless of
> your feelings about the particular merits of accomplishing the same
> thing with closures, there *is* a way to handle this case:
>
> try (LockDisposer l = new LockDisposer(lock.readLock())) {
>  clientCount++;
> }
>
> try (LockDisposer l = new LockDisposer(lock.writeLock())) {
>  return field.getValue();
> }

Yow.  I think the cure might be worse than the disease.

> I suspect a LOT of people will be doing something similar to this hack
> if this proposal is adopted.  To make it much cleaner, you could first
> adjust this proposal so that the try statement can take an expression
> that returns a Disposable, and then you could adjust the Lock classes
> so that a) lock() returns this and b) they implement Disposable, at
> which point you could have:

You can't make such changes to existing interfaces without breaking
existing code.  Changing the signature of lock() breaks existing
callers, and adding a close() method (to implement Disposable) breaks
existing implementations.



More information about the coin-dev mailing list