Historique de la question :
Les classes Record (record) sont apparues dans Java 14 en tant que preview, et depuis la version Java 16, elles sont une fonctionnalité stable. Elles mettent en œuvre le concept de conteneurs immuables (immutable) pour stocker des données, semblables aux value-objects. C'est une réponse à la verbosité des DTO et POJO classiques en Java.
Problème :
Pour les objets simples contenant des données, il était nécessaire d'implémenter manuellement les constructeurs, equals(), hashCode(), toString(). C'était un travail répétitif, sujet à erreurs, prenant beaucoup de lignes de code.
Solution :
Une classe record est déclarée en une seule ligne et obtient automatiquement un constructeur, des accesseurs, equals(), hashCode(), toString(). Les champs d'un record sont immuables (final), et les records sont particulièrement utiles pour transmettre des informations entre les couches de l'application.
Exemple de code :
public record Point(int x, int y) {} Point p = new Point(3, 5); System.out.println(p.x()); // 3 System.out.println(p); // Point[x=3, y=5]
Caractéristiques clés :
Peut-on modifier l'état d'un objet record après sa création ?
Non — tous les champs sont final, il n'est pas possible de modifier la valeur de quelque manière que ce soit.
Peut-on créer un record avec une logique non standard dans le constructeur ?
Oui, il est possible de définir un constructeur compact ou ordinaire et d'ajouter des vérifications :
public record Point(int x, int y) { public Point { if (x < 0 || y < 0) throw new IllegalArgumentException(); } }
Un record peut-il être abstrait, ou hériter des champs/de la logique d'autres classes ?
Non — un record est toujours final. Il peut implémenter des interfaces, mais ne peut pas hériter de classes, excepté Object.
Utilisation de longs POJO pour chaque requête/réponse, avec écriture manuelle de equals, hashCode, toString, constructeurs et accesseurs.
Avantages :
Inconvénients :
Conversion de tous les DTO en classes record :
public record UserDTO(String login, String email) {}
Avantages :
Inconvénients :