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 constructor"

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 these:

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 legal?


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)


Maurizio





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.bier...@oracle.com <mailto:gavin.bier...@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.bier...@oracle.com <mailto:gavin.bier...@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


Reply via email to