JDK 9 RFR of JDK-8068948: Update java.base module to use new try-with-resources statement

Peter Levart peter.levart at gmail.com
Mon Jan 19 10:02:34 UTC 2015


On 01/16/2015 06:46 PM, Ivan Gerasimov wrote: > >>> Might it also make sense to allow anonymous variables in the >>> try-with-resource statement? >>> So that something like `try (() -> System.out.println("closed")) {}` >>> would work... >> >> I don't think that is necessary. In JDK 7, we started out allowing a >> general AutoCloseable expression in a try-with-resources statement >> and that proved problematic. Supporting a final / effectively final >> variable seems to be the right balance. The rationale is written up >> in the JSR 334 materials. >> > > Yes, I agree. And it can easily be moved to the finally block, of course. > However, this: > > ExecutorService executor = ...; > try (executor::shutdown) { > } > > still looks a bit more attractive to me, comparing to `try (Closeable > c = executor::shutdown) {` > Maybe one day ... :-) > > Sincerely yours, > Ivan >  If try-with resources was designed after lambdas, various other forms could be considered. For example, the following: try (SomeType var = expression; expression with (target) type Consumer<? super SomeType>) { ... } The example with ExecutorService would then read: try (ExecutorService executor = Executors.newCachedThreadPool(); ExecutorService::shutdown) { ... use executor ... } This could even be done in the future as the 2nd form of try-with-resources. Maybe one day ... :-) Peter 


More information about the core-libs-dev mailing list