Em um esforço para simplificar o código, Java seria aprimorado com a criação de registros derivados, por meio de uma proposta que forneceria um meio de criar instâncias de registros a partir de registros existentes por meio de um bloco de código de transformação.

A proposta OpenJDK de autoria da equipe técnica da Oracle, intitulada “Criação de Registro Derivado”, simplificaria o código derivando um novo registro de um registro existente, atualizando apenas os componentes que precisam ser alterados. A proposta observa que, como os registros são valores imutáveis, os desenvolvedores frequentemente constroem novos registros para refletir novos dados. O recurso entraria no Java em um estado de visualização.

Os objetivos da proposta incluem fornecer um meio conciso para criar novas instâncias de registro derivadas de valores de registro existentes e simplificar a declaração de classes de registro, eliminando a necessidade de fornecer métodos explícitos de “murchar”. Os métodos Wither são semelhantes aos métodos setter, mas para classes imutáveis.

Não é um objetivo, afirma a proposta, apoiar uma classe distinta de métodos wither ou fornecer uma construção withcode no estilo Pascal que simplifique o acesso a expressões complexas arbitrárias. Também não é objetivo fornecer expressões de criação de instância derivadas para valores de classe comuns e sem registro, embora isso possa ser o assunto de um futuro JEP (JDK Enhancement Proposal).

Ao explicar a motivação para a criação de registros derivados, a proposta observa que a imutabilidade das classes de registros proporciona segurança e previsibilidade, e permite uma série de recursos que os tornam fáceis de usar. No entanto, os sistemas que os desenvolvedores precisam modelar possuem estado, e o estado em evolução modelado por classes de registro pode ser complicado. A criação derivada fornece uma maneira sucinta de atualizar os componentes das classes de registro quando o estado subjacente muda.

A criação de registros derivados faria parte da Standard Edition (SE) do Java. Nenhuma versão específica do Java SE é citada na proposta ainda como alvo para o recurso. A versão atual do Java padrão é o JDK 21, com o sucessor JDK 22 previsto para março, com seu conjunto de recursos já congelado. O JDK 23 é esperado para setembro.