Nouveau candidat JEP : 456 : Variables et modèles sans nom
Variables inutilisées :
Le besoin de déclarer une variable qui n’est jamais utilisée est particulièrement fréquent dans le code dont l’effet secondaire est plus important que son résultat. Par exemple, ce code calcule le total comme effet secondaire d’une boucle, sans utiliser l’ordre des variables de boucle :
Variables de configuration inutilisées :
Les variables locales peuvent également être déclarées par des modèles de type ;ces variables locales sont connues sous le nom de variables de modèle et les modèles de type peuvent donc également déclarer des variables non utilisées.
Considérons le code suivant, qui utilise des modèles de type dans les étiquettes de cas d’une instruction de bouton qui bascule sur une instance d’une Ball de classe scellée :
Supposons maintenant que nous définissions une classe d’enregistrement Box qui peut contenir n’importe quel type de Ball, mais qui peut également contenir la valeur nulle :
Les modèles de type imbriqués déclarent toujours les variables de modèle qui ne sont pas utilisées.
Étant donné que ce bouton est plus impliqué que le précédent, supprimer les noms des variables inutilisées dans les modèles de type imbriqués améliorerait davantage la lisibilité.
Nouveau candidat JEP : 457 : API Class-File (préversion)
La nouvelle API Class-File facilitera les mises à jour Java – Inside Java Newscast #56
Ces vidéos présentent la nouvelle API class-file qui fournit une API d’analyse et de manipulation de bytecode à jour avec le JDK. Je me suis aidé de celles-ci pour vous expliquez un peu mieux de quoi il en retourne…
Les objectifs de cette API sont :
- Fournir une API pour traiter les fichiers de classe qui suit le
class
format de fichier . - Permettre aux composants du JDK de migrer vers l’API standard et, éventuellement, supprimez la copie interne du JDK de la bibliothèque ASM tierce.
Éléments, constructeurs et transformations
L’API Class-File réside dans le java.lang.classfile
package et les sous-packages. Il définit trois abstractions principales :
- Un élément est une description immuable d’une partie d’un fichier de classe . Il peut s’agir d’une instruction, d’un attribut, d’un champ, d’une méthode ou d’un fichier de classe entier. Certains éléments, comme les méthodes, sont des éléments composés ; en plus d’être des éléments, ils contiennent également des éléments qui leur sont propres et peuvent être traités dans leur ensemble ou bien décomposés.
- Chaque type d’élément composé a un constructeur correspondant qui a des méthodes de construction spécifiques (par exemple,
ClassBuilder::withMethod
) et est également duConsumer
type d’élément approprié. - Enfin, une transformation représente une fonction qui prend un élément et un constructeur et détermine comment, le cas échéant, cet élément est transformé en d’autres éléments.
Nous présentons l’API en montrant comment elle peut être utilisée pour analyser des fichiers de classe, générer des fichiers de classe et combiner l’analyse et la génération en transformation.
Il s’agit d’une API d’aperçu , désactivée par défaut.
Pour essayer les exemples ci-dessous dans JDK 22, vous devez activer les fonctionnalités d’aperçu comme suit :
- Compilez le programme avec
javac --release 22 --enable-preview Main.java
et exécutez-le avecjava --enable-preview Main
; ou, - Lorsque vous utilisez le lanceur de code source , exécutez le programme avec :
java --source 22 --enable-preview Main.java
Générer des fichiers de classe avec des constructeurs
Supposons que nous souhaitions générer la méthode suivante dans un fichier de classe :
Avec ASM nous pourrions générer la méthode comme suit :