Intitulée « Derived Record Creation », la proposition OpenJDK a été rédigée par les équipes techniques d’Oracle. Elle veut rationnaliser le code en dérivant un nouvel enregistrement à partir d’un existant en mettant à jour les composants. La proposition note que les enregistrements étant des valeurs immuables, les développeurs en créent fréquemment d’autres pour intégrer des données supplémentaires. Cette fonctionnalité entrerait dans Java à l'état d'avant-première.

Les objectifs de la proposition sont de fournir un moyen concis de créer des instances d'enregistrement dérivées de valeurs d'enregistrement existantes et de rationaliser la déclaration des classes d'enregistrement en éliminant la nécessité de fournir des méthodes « wither » explicites. Les méthodes « Wither » sont similaires à celles dites « Setter », mais pour les classes immuables.

Un périmètre bien tracé

Selon la proposition, l’ambition n'est pas de prendre en charge une classe distincte de méthodes « wither » ou de fournir une construction « with » de style Pascal qui simplifie l'accès à des expressions complexes arbitraires. Le but n'est pas non plus de fournir des expressions de création d'instances dérivées pour les valeurs ordinaires des classes sans enregistrement, bien que cela puisse faire l'objet d'une future JEP (proposition d'amélioration du JDK).

En expliquant la motivation de la création d'enregistrements dérivés, la proposition note que l'immuabilité des classes d'enregistrements apporte à la fois sécurité et prévisibilité, et ajoute un certain nombre de caractéristiques qui les rendent faciles à utiliser. Cependant, les systèmes que les développeurs doivent modéliser ont un état, et l'évolution de l'état modélisé par les classes d'enregistrement peut être fastidieuse. La création dérivée offre un moyen succinct de mettre à jour les composants des classes d'enregistrement lorsque l'état sous-jacent change.

La création d'enregistrements dérivés ferait partie de l'édition standard (SE) de Java. Aucune version spécifique de Java SE n'est encore citée dans la proposition comme cible de cette fonctionnalité. La version actuelle de Java standard est le JDK 21, dont le successeur, le JDK 22, est attendu en mars et les fonctionnalités sont déjà gelées. Le JDK 23 est attendu pour septembre.