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