Extending 15.28 to include toString() on an enum constant

Brian Goetz brian.goetz at oracle.com
Mon Jul 9 13:10:59 UTC 2018


I doubt 303 will ever be able to constant fold a non-final virtual 
method in this manner.  Enums can override toString(), and can do so via 
separate compilation; this seems like it would be too big of a surprise 
to users.  Virtual methods are much riskier to constant fold than static 
ones (in part, because it's action-at-a-distance; a declaration modifier 
on a supertype causes folding of a method in a subtype.)


On 7/9/2018 4:52 AM, Maurizio Cimadamore wrote:
> Remi is correct - 303 has the potential to special case toString() 
> method calls on enums. One thing that 303 lacks, at least at the 
> moment, is the ability to redefine what goes into places where a 
> constant expression is expected (case labels, annotations, ...). That 
> is, the additional constant propagation occurs *after* type-checking, 
> and it's mostly there to support code generation. What you ask would 
> have an impact on the language frontend (and would therefore require 
> some spec text for it) - I'm unsure as to whether this falls within 
> the scope of 303.
>
> Maurizio
>
>
> On 09/07/18 07:39, Remi Forax wrote:
>> JEP 303 (http://openjdk.java.net/jeps/303) allows to build such kind 
>> of constants, i don't know if it works in the context of annotations 
>> but it's a nice use case.
>



More information about the amber-spec-experts mailing list