Proposal: Automatic Resource Management
Mark Mahieu
markmahieu at googlemail.com
Wed Mar 4 13:45:26 PST 2009
Josh,
On 4 Mar 2009, at 19:09, Joshua Bloch wrote:
> I think the solution must necessarily be a bit hackish. Here's
> one possibility, based loosely on the way for-each works. A
> resource can implement one of several interfaces. One (currently
> named Disposable) contains a close method. Another (name tbd)
> contains a dispose method. A third might contain a destroy
> method. I can't imagine an existing type to which none of these
> three interfaces can be retrofitted. The SWT Resource type could
> be retrofitted to implement the interface with the dispose method,
> without even adding a new method. This isn't beautiful, but it
> works. I think it's probably a good idea.
Well, since we probably can't iron out every inconsistency with
what's gone before, we could try to be consistently ironic:
interface Disposable {
void close() throws Exception;
}
interface Destroyable {
void dispose() throws Exception;
}
interface Kloseable {
void destroy() throws Exception;
}
;)
In all seriousness, what should the behaviour then be if a class
implements two or more of these interfaces? Should all of the
'disposal' methods be invoked?
Putting interfaces aside for a moment, instead of an annotation my
instinct would have been to reach for a modifier here, especially
given that this proposal is for dedicated language support rather
than a library based solution. There's even one reserved word
already that conveys the meaning pretty well:
class SomeResourceType {
public finally void release() {
// ...
}
}
That approach may well raise all sorts of questions as well - I can
certainly think of a couple - but compared to using an annotation,
what's wrong with it?
Mark
More information about the coin-dev
mailing list