Why does try-with-resource require a local variable?

The link in the comment by @McDowell reveals the correct answer in a blog post comment by Joe Darcy who led the Java Technology Specification that introduced the try-with-resources statement:

Back in JDK 7, we started with a try-with-resources construct like
that allowed a general expression to be used for the resource,
including a method call. However, the expert group found by the early
draft review
(http://jcp.org/aboutJava/communityprocess/edr/jsr334/index.html) that

“A possible future change [to the try-with-resources statemenbt] is
dropping support for a resource to be specified as a general
Expression. Nontrivial specification and implementation complexities
arise from allowing a general Expression to be used as resource. A
restricted expression that could be an identifier or a
PrimaryNoNewArray may suffice. Even the more severe restriction of
just allowing an identifier may provide nearly all the additional
utility of allowing a full expression (over forcing the declaration of
a new resource variable) at a much lower marginal implementation and
specification impact.”

By the end of JDK 7, what we wanted was a fresh variable declaration
for the resource or an existing final / effectively final variable. We
only had time to provide the former in 7; in 9, we are providing the
latter too.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)