[records] Latest spec available

Gavin Bierman gavin.bierman at oracle.com
Thu May 7 12:26:28 UTC 2020

As Records has now been approved as JEP 384 [1] I have updated and relocated the
spec appropriately:


(The old URL now redirects to this one)


[1] https://mail.openjdk.java.net/pipermail/amber-dev/2020-May/005964.html

> On 1 May 2020, at 18:09, Gavin Bierman <gavin.bierman at oracle.com> wrote:
> I have updated this spec with the new restriction to compact constructors:
>    It is a compile-time error if an assignment occurs (16) to a 
>    field corresponding to a record component of the record class
>    in the body of the compact constructor.
> Latest spec available at:
>    http://cr.openjdk.java.net/~gbierman/records2/20200501/specs/records-jls.html
> Thanks,
> Gavin
>> On 28 Apr 2020, at 06:48, Gavin Bierman <gavin.bierman at oracle.com> wrote:
>> Dear all:
>> The latest draft of the spec for the second preview of records is available at:
>> http://cr.openjdk.java.net/~gbierman/records2/20200428/specs/records-jls.html
>> The changes from the first preview spec [1] have been discussed on this list and
>> are listed below for reference. However, with an eye to a better treatment of
>> nesting in Java as discussed by Brian [2] we have taken the opportunity to
>> refactor the spec somewhat to allow for a better treatment of local declarations
>> including local records. 
>> We have kept these refactorings as two separate JLS change documents, linked to
>> from the records spec. The first document clarifies the usage of terms related
>> to classes and interfaces, and more clearly distinguishes them from types. The
>> second builds on this and regularizes the treatment of nested and local
>> declarations. In particular, it relaxes previous restrictions and permits *local
>> interface and enum declarations*. The records spec then builds on top of these
>> two changes to the JLS to support records (and local record declarations).
>> Comments welcome!
>> Gavin
>> PS: The URLs will change once we have a JEP number for the second preview of
>> records.
>> [1] http://cr.openjdk.java.net/~gbierman/jep359/jep359-20200115/specs/records-jls.html
>> [2] https://mail.openjdk.java.net/pipermail/amber-spec-experts/2020-January/001904.html
>> Details: 
>> The changes are the same as those in the first preview of Records in Java SE 14,
>> except for the following:
>> - All text now uses the terminology of "Consistent Class and Interface
>> Terminology" spec change document
>> - The handling of local records now builds on the changes in "Local Static
>> Interfaces and Enum Classes" spec change document
>> - Removed unnecessary change to 4.12.4
>> - 8.10.1: Removed possibility of `final` modifier for record components
>> - 8.10.1: Clarified that annotations on a record component only remain on the
>> component if its annotation type is applicable in the record component context
>> - 8.10.1: Corrected text around use of `@SafeVarArgs` annotation
>> - 8.10.4: Removed requirement that canonical constructor must be `public`. Any
>> access modifier must provide at least as much access as the record class. If a
>> canonical constructor is implicitly declared, then its access modifier is the
>> same as the record class.
>> - 8.10.4: Added requirement each formal parameter in the formal parameter list
>> of the constructor must have the same name and type as the corresponding record
>> component. The formal parameter must be a variable arity parameter if and only
>> if the corresponding record component is a variable arity record component.
>> - 8.10.4 Added error condition if a field corresponding to a record component of
>> a record class is neither DA nor DU in the body of a compact constructor.
>> - New case for using `@Override` annotation to declare that a method is
>> an accessor method for a record component.

More information about the amber-spec-experts mailing list