JDK 14 RFR of JDK-8236695: java.lang.Record should be declared with an explicit constructor

Joe Darcy joe.darcy at oracle.com
Mon Jan 6 23:22:42 UTC 2020


Hello,

The initial implementation of java.lang.Record uses a default 
constructor; an explicit constructor should be added instead. Please 
review the code change and CSR for this:

     JDK-8236695: java.lang.Record should be declared with an explicit 
constructor
     CSR: https://bugs.openjdk.java.net/browse/JDK-8236699
     http://cr.openjdk.java.net/~darcy/8236695.0/

Patch below. It is sufficient for the constructor to be declared as 
protected rather than public; the serialization tests and other records 
test pass with this change.

Thanks,

-Joe

--- old/src/java.base/share/classes/java/lang/Record.java 2020-01-06 
13:47:31.740871560 -0800
+++ new/src/java.base/share/classes/java/lang/Record.java 2020-01-06 
13:47:31.552777567 -0800
@@ -91,6 +91,11 @@
                               essentialAPI=true)
  public abstract class Record {
      /**
+     * Constructor for record classes to call.
+     */
+    protected Record() {}
+
+    /**
       * Indicates whether some other object is "equal to" this one.  In 
addition
       * to the general contract of {@link Object#equals(Object)},
       * record classes must further participate in the invariant that when



More information about the core-libs-dev mailing list