Feedback and comments on ARM proposal - resend

Howard Lovatt howard.lovatt at
Wed Mar 18 17:18:48 PDT 2009

Hi All,

2009/3/19 Neal Gafter <neal at>:


> It's not even compatible to remove a throws clause from a
> non-overridable method!  That's because it would break callers who
> invoke it in a try-catch statement.

I am not proposing to do this, I am proposing adding the new interface
to existing classes if you can and if you can't then wrap the existing
class in a new one. I am not proposing modifying existing interfaces
at all. This is a deliberate attempt to start again with resources and
provide a unified model. For example suppose as Neal has suggested
that the foreach loop understood resources, it would be great to write
something like:

    for ( final String line : AutoResources.asLines( filename ) ) { ... }


   public class AutoResources {
       private AutoResources() {}

       public static FileAsLines asLines( final String filename )
throws FileNotFoundException { return new FileAsLines( filename ); }

       public static class FileAsLines implements AutoResource,
Iterable<String> {
           private final FileReader reader;

           FileAsLines( final String filename ) throws
FileNotFoundException { reader = new FileReader( filename ); }

           public void autoDispose() {
               try { reader.close(); }
               catch ( IOException e ) { throw new IllegalStateException( e ); }

          public Iterator<String> iterator() { return new
Iterator<String>() { ... }; }


(Note, in a previous post I have suggested that replacing keyword new
when applied to an AutoResources with a new keyword, autoresource,
this additional change would make this foreach example even clearer.)

In the above code there is no attempt to retrofit AutoResource to
FileReader, instead it is wrapped.

  - Howard.

More information about the coin-dev mailing list