Feb 23, 2026
This episode presents Project Amber lead Brian Goetz’s recent
email “Data Oriented Programming, Beyond Records”, wherein he
describes plans to improve Java’s data handling capabilities by
introducing carrier classes, a generalization of records. Like
them, carrier classes describe their state through a component list
that defines the type’s external API: accessors, a constructor, and
matching deconstructor - this allows carrier classes to participate
in pattern matching and reconstruction. Unlike records, the
implementation of this API remains the developer’s task although
component fields offer a shortcut for the common case where the API
does map to a field. Carrier classes don’t have to be final (and
can hence participate in inheritance) and neither do their fields
(so they can be mutable data carriers).
The email also mentions carrier interfaces, allowing records to be
abstract as well as a relaxation of deconstruction patterns that
make them more amenable to evolution of the matched type. This
episode also briefly touches on Gavin Bierman’s mail to the Project
Amber mailing list that announces pattern assignments and constant
patterns.