Alors que le JDK (Java Development Kit) 24 vient d'atteindre sa disponibilité générale, Oracle a livré un aperçu des fonctionnalités Java qui devraient arriver dans un avenir assez proche, avec notamment une amélioration du boxing des valeurs primitives et des types de classe de valeur à restriction nulle. En début de semaine, Oracle a annoncé cinq fonctionnalités en préparation pour une prochaine version de Java, dont les valeurs stables, une API officiellement prévue pour la version 25 du JDK, attendue en septembre. Les deux autres fonctionnalités citées sont les classes de valeurs et les objets, ainsi que la création de records dérivés.

Une amélioration du boxing des valeurs primitives 

L'opération de « boxing » transforme un type primitif en une instance de la classe wrapper. Cette version améliorée prend en charge les optimisations du langage qui traitent les fonctionnalités primitives davantage comme des types de référence. Les objectifs sont notamment de faciliter le boxing des valeurs primitives lorsqu'elles sont utilisées comme « récepteur » d'un accès à un champ, d'une invocation de méthode ou d'une référence de méthode, et d'autoriser les types de retour non mis en boîte (unboxed) lorsqu'une méthode est remplacée par un type de référence de retour. Les types primitifs seraient également pris en charge en tant qu'arguments de type.

Les types de classes de valeurs avec restriction nulle

Ils permettent au type d'une variable qui stocke des objets de valeur d'exclure null, ce qui rend le stockage plus compact et apporte d'autres optimisations au moment de l'exécution. Les classes de valeurs avec restriction nulle sont présentées en avant-première comme une fonctionnalité du langage et une fonctionnalité de la machine virtuelle.

Les valeurs classes et objets

Ceux-ci améliorent la plate-forme Java avec des valeurs objets qui sont des instances de classe qui ne possèdent que des champs finaux et n'ont pas d'identité d'objet. Les objectifs sont notamment de laisser aux développeurs la possibilité d'opter pour un modèle de programmation de valeurs simples, dans lequel les objets se distinguent uniquement par les valeurs de leurs champs. La proposition vise également à maximiser la liberté de la JVM d'encoder les valeurs simples de manière à améliorer l'empreinte mémoire, la localité et l'efficacité du ramasse-miettes.

La création de records dérivés

Elle améliore le langage en proposant de créer un nouveau record (une classe qui possède des caractéristiques particulières) à partir d'un record existant. L'un des objectifs est de fournir un moyen concis de créer de nouvelles valeurs de record dérivées de valeurs de records existantes. Un autre objectif est de rationaliser la déclaration des classes de record sans avoir à passer par des méthodes explicites de type « wither », l'analogue immuable des méthodes de type « setter ».

Les valeurs stables

Il s’agit d’objets qui contiennent des données immuables. Les valeurs stables étant traitées comme des constantes par la JVM, elles permettent les mêmes optimisations de performances que celles permises par la déclaration d'un champ comme final. En même temps, elles offrent une plus grande flexibilité quant au timing de l'initialisation. La proposition vise notamment à améliorer le démarrage des applications Java en brisant l'initialisation monolithique de l'état de l'application.