On 10/9/2013 1:21 PM, Jim Janney wrote:
Yes, in Java 7 you can have clean syntax and clean semantics. Looks
like a win all around.
For Java 5+, with varargs you could do (not compiled):
public class MyIoUtils {
public static void closeAll( Closeable ... toClose ) {
for( Closeable closeMe : toClose )
try {
if( closeMe != null ) closeMe.close();
} catch( IOException ex ) {
Logger.getLogger( "MyIoUtils" ).log( ex );
}
}
}
and get a somewhat cleaned up try catch
OutPutStream io1 = null;
BufferedStream bs = null;
try {
io1 = new OutputStream( ...
bs = new BufferedStream( io1, ...
// do stuff
}
finally {
MyIoUtils.closeAll( bs, io1 );
}
Mostly I don't care for deep nesting, I think it reads poorly, and I
think it can also be hard to trace out for a programmer reading the
source. Giving the concept of closing a lot of objects a name like
"closeAll" promotes literate programming, imo.
Mmm... you're complicating the code with extra assignments and tests,
just to avoid one layer of nesting. I like the version with two
happening in the code: two independent cleanups. But the Java 7 version
is better.