Je ne comprends pas @ConstructorProperties

À propos de @ConstructorProperties

La documentation indique “Une annotation sur un constructeur qui montre comment les parameters de ce constructeur correspondent aux méthodes de lecture de l’object construit”. Et cela donne un exemple ambigu, car les noms de variables sont identiques aux parameters.

Je ne comprends vraiment pas pourquoi @ConstructorProperties({"x", "y"}) fait référence aux getters getX() et getY() . Les cas de x et y ne sont pas compatibles avec les annotations.

Donc, pour clarifier ce que devrait être l’annotation pour le constructeur dans ce code:

 public class Point { public Point(int a, int b) { this.c = a; this.d = b; } public int getCc() { return c; } public int getDd() { return d; } private final int c, d; 

}

(J’ai modifié le code parce que d’après la réponse, je comprends que l’annotation s’attend à ce que le code respecte la convention de cas habituelle pour les accesseurs, par exemple cc getter doit être getCc() . variable retournée)

Deuxième question…

 @ConstructorProperties(value="text") 

Que signifie cette annotation pour JButton (Ssortingng text) ?

Il semble prévu pour être utilisé par des outils, mais je veux juste comprendre.

@ConstructorProperties s’appuie sur des conventions de dénomination communes pour faire correspondre les arguments du constructeur avec les méthodes getter et setter. Les noms des méthodes d’access et de définition sont généralement créés en mettant en majuscule le nom de la propriété et en ajoutant le préfixe à get ou à l’ ensemble (ou correspond à un booléen). L’exemple utilisant des lettres simples n’est pas le meilleur pour montrer cela.

Exemple: une someValue devient getSomeValue

Gardez à l’esprit que les noms de paramètre de méthode ne sont pas visibles au moment de l’exécution. C’est l’ordre des parameters qui compte. Les noms des propriétés et des variables utilisées dans le constructeur importent peu. Les éléments suivants font toujours référence à une méthode nommée getSomeValue() .

 @ConstructorProperties({"someValue"}) public Point(int a) { this.c = a; } 

Le cas d’utilisation de cette annotation semble être la (dé) sérialisation d’objects immuables. Le framework obtient toutes les valeurs en utilisant le getter d’objects, puis sérialise l’object. Lorsque l’object doit être désérialisé, le framework doit créer une nouvelle instance. Parce que l’object est immuable, il n’a pas de setters cependant. Le constructeur est le seul moyen de définir ces valeurs et l’annotation est utilisée pour indiquer au framework comment construire l’object sérialisé à partir des valeurs sérialisées.