Java 22 : vers les constantes calculées et les API de fichiers de classes ?

Par:
admin

mar, 03/10/2023 - 16:26

Java 21 est sorti le 19 septembre dernier et Oracle travaille déjà à Java 22 qui devrait être publiée comme une version avec support à court terme, c'est-à-dire 6 mois. Pour l'instant la page officielle de Java 22 ne liste aucune fonctionnalité particulière. Cependant on s'attend à y retrouver notamment la concurrence structurée et le nouveau ramasse-miettes Shenandoah qui faisaient partie des fonctionnalités en préversion dans Java 21

On s'attend aussi à l'arrivée des constates calculées et de l'API de fichier de classe, leur propositions ayant été mises à jour récemment. Ces propostions évoquent d'ailleurs une présence dans Java 22.

Les constantes calculées

La proposition est à l'état de brouillon à l'heure actuelle. Les constantes calculées sont des détenteurs de valeurs immuables qui sont initialisés au plus une fois, comme nous l'avons dit. Les constantes calculées, selon la proposition, offrent les avantages en termes de performances et de sécurité des champs finaux, tout en offrant une plus grande flexibilité quant au timing d'initialisation. 

Une constante calculée est un objet titulaire qui est initialisé au plus une fois. Son initialisation est garantie au plus tard lors du premier accès. L'objet est exprimé comme un objet de type ComputedConstant, qui, comme Future, est le support d'un calcul qui peut ou non avoir eu lieu. Les instances ComputedConstant sont créées en fournissant une valeur supplier, généralement sous la forme d'une expression lambda ou d'une référence de méthode, qui calcule la valeur constante :

class Bar {
    // 1. Declare a computed constant value
    private static final ComputedConstant<Logger> LOGGER =
            ComputedConstant.of( () -> Logger.getLogger("com.foo.Bar") );

    static Logger logger() {
        // 2. Access the computed value
        //    (evaluation made before the first access)
        return LOGGER.get();
    }
}

API de fichier de classe

L'API de fichier de classe est définie par la proposition JEP 457. Cette API d'instrumentalisation a pour vocation de devenir le standard pour analyser, générer et transformer les fichiers de classe Java. En revanche, précise la JEP, si elle veut permettre le remplacement des utilisations existantes d'ASM dans le JDK, cette API n'a pas pour objectif de rendre obsolètes les autres bibliothèques de traitement de fichiers de classe de l'écosystème, ni d'être l'API de fichiers de classe la plus rapide au monde.