[string-templates] Template expression in expression statement?

Tagir Valeev amaembo at gmail.com
Tue Jul 25 08:52:04 UTC 2023


Hello!

It looks like, the latest javac (build 22-ea+7-489) accepts string
templates as expression statements:

public class Demo {
    public static void main(String[] args) {
        STR."hello";
    }
}

The expression statement spec (JLS 14.8, [1]) states that only
'StatementExpression' productions are allowed inside expression
statements. This is a closed list of expressions, and it was not
updated in the latest spec draft for JEP 430 [2] to include 15.8.6
Template Expressions. I'm not sure what the latest consensus is. On
one hand, template expression is essentially a method call that may
produce a side effect (e.g. logging :D). On the other hand, such kind
of usage is probably discouraged. In any case I see the discrepancy
here: either spec or javac implementation should be updated.

With best regards,
Tagir Valeev.

[1] https://docs.oracle.com/javase/specs/jls/se20/html/jls-14.html#jls-14.8
[2] https://cr.openjdk.org/~gbierman/jep430/jep430-20230526/specs/string-templates-jls.html


More information about the amber-spec-experts mailing list