Draft JLS spec for records
maurizio.cimadamore at oracle.com
Tue Sep 3 13:40:06 UTC 2019
* in 8.10.1:
"Each record component in the /RecordHeader/ declares one |private
final| field in the record class whose name is same as the /Identifier/
in the record component."
This seems a bit early. Also, you repeat the same in 8.10.3, which is
arguably a much better place?
* Also, in 8.10.1:
"It is a compile-time error for a record header to declare a record
component with the name clone, finalize, getClass, hashCode, notify,
notifyAll, readObjectNoData, readResolve, serialPersistentFields,
toString, wait, or writeReplace."
Would this make more sense in 8.10.3?
"A record declaration may contain constructor declarations. These
constructor declarations may be of the same form as a constructor
declaration in a class type. In addition, a record declaration may
contain a /compact constructor declaration/, which is a form of
constructor declaration that explicitly declares the canonical constructor."
I think this sounds a bit flat - that is, from this paragraph is not
really clear what a compact constructor declaration is for - I guess you
can also re-declare the canonical constructor using normal old-style
constructor syntax, no?
I would omit the ", which is a form of constructor declaration that
explicitly declares the canonical constructor" and simply skip over to
the next para.
" one which is identical to the record header of /R/ is added
implicitly." - not sure I would lean on 'identical' here. Maybe better
to say that the formal parameter list is _derived_ from the record
header (e.g. parameter names/types are the same, and in same order, as
* initialised - UK vs US english - not sure which we should use, but I
see other uses of 'initialized' around
we say this:
It is a compile-time error if an annotation of type /T/ is syntactically
a modifier for:
a record component but T is not applicable to record component
declarations, type contexts, type parameter declarations, field
declarations, or method declarations."
But it's not super clear what happens to the annotations that are
actually correct and how they are propagated. Should e.g. the fact that
a field decl anno on a record element is propagated on its synthetic
private field be covered by the JLS?
On 23/08/2019 22:25, Gavin Bierman wrote:
> A draft language spec for records is available at:
> This spec doesn’t yet discuss varargs records - to appear in the next
> All comments welcomed!
More information about the amber-spec-observers