Updated Draft specs for JEP 359 (Records)

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu Nov 21 16:23:03 UTC 2019

Hi Gavin, looks great - some minor comments:

* I'm having problem parsing this sentence

"An explicitly declared accessor method is not annotated with any 
applicable annotation that appears on the corresponding record component."

What do you mean exactly? I guess you mean that the explicit accessor 
does not implicitly get from the components (e.g. you have to restate them)?

* when you speak of explicit canonical constructor, I see this:

"The body of the canonical constructor must not contain a return 
statement (14.17)."

Why do we have this restriction? After all, as with any other 
constructor, the language/compiler will ensure that, at the point of 
'return' all final fields have been assigned, no?

* "If a record type R declares constructors other than the canonical 

I think it would be better to rephrase in term of "constructor that is 
not override-equivalent with canonical constructor" - the term 'other' 
is vague. Also, override equivalence takes into consideration cases like 

record Foo(List<String> ls) {
     Foo(List ls) { } //am I canonical?

Typically we allow such moves - for instance there could be clients of 
the record class which might need a looser signature for compatibility 
reason. Same should hold for accessors - e.g.

interface RawGetter {
    List list();

class ListHolder(List<String> list) implements RawGetter { } //is this 

In other words:

* having a more-specific accessor/constructor parameter type (e.g. 
List<String>) where the component is raw (e.g. List) should always be ok
* having a less-specific accessor/constructor parameter type (e.g. List) 
where the component is generic (e.g. List<String>) could be allowed with 
unchecked warnings (as we do for override)


On 21/11/2019 15:01, Gavin Bierman wrote:
> A hopefully final draft language spec for JEP 359 (Records) is 
> available at:
> http://cr.openjdk.java.net/~gbierman/jep359/jep359-20191121/specs/records-jls.html 
> This incorporates (I hope!) all the very helpful suggestions from 
> everyone on these lists - many thanks.
> As always - any further comments/thoughts/bugs most welcome!
> Gavin
>> On 31 Oct 2019, at 14:17, Gavin Bierman <gavin.bierman at oracle.com 
>> <mailto:gavin.bierman at oracle.com>> wrote:
>> An updated draft language spec for JEP 359 (Records) is available at:
>> http://cr.openjdk.java.net/~gbierman/jep359/jep359-20191031/specs/records-jls.html
>> (Alongside is a draft JVM spec for this feature:
>> http://cr.openjdk.java.net/~gbierman/jep359/jep359-20191031/specs/records-jvms.html
>> )
>> As always, please email me any comments/thoughts/bugs.
>> Thanks,
>> Gavin
>>> On 23 Aug 2019, at 22:25, Gavin Bierman <gavin.bierman at oracle.com 
>>> <mailto:gavin.bierman at oracle.com>> wrote:
>>> A draft language spec for records is available at:
>>> http://cr.openjdk.java.net/~gbierman/8222777/8222777-20190823/specs/records-jls.html
>>> This spec doesn’t yet discuss varargs records - to appear in the 
>>> next draft.
>>> All comments welcomed!
>>> Thanks,
>>> Gavin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20191121/d6d92683/attachment.html>

More information about the amber-spec-experts mailing list