Updated document on data classes and sealed types

Brian Goetz brian.goetz at oracle.com
Sat Mar 2 13:30:14 UTC 2019



> but can I compatibly turn a class type into a record type? It's 
> potentially a source-compatible change (make the state description 
> match the class's ctor), but binary-compatible?

Yes.  You can transform

     class Point {
         final int x, y;

         public Point(int x, int y) { this.x = x; this.y = y; }

         public int x() { return x; }
         public int y() { return y; }

         // state-based equals and hashCode

         // more methods
     }

into

     record Point(int x, int y) {
         // more methods
     }

and this will be source- and binary-compatible.

> Similarly, if a record type is chafing at the restrictions of "state 
> only!", then can I (source|binary)-compatibly turn it into a class type?

Yes, mostly.  Records do currently have one aspect that is not *yet* 
denotable by ordinary classes; the pattern match extractor.  Until 
ordinary classes can declare one, existing records whose clients use 
pattern matching can't be migrated.




More information about the amber-spec-experts mailing list