comment s'appelle le super-constructeur à Lombok
J'ai une classe
@Value
@NonFinal
public class A {
int x;
int y;
}
J'ai une autre classe B
@Value
public class B extends A {
int z;
}
lombok est de lancer d'erreur disant qu'il ne peut pas trouver Un() constructeur, appeler explicitement ce que je veux de lombok à faire est de donner de l'annotation à la classe b de sorte qu'il génère le code suivant:
public class B extends A {
int z;
public B( int x, int y, int z) {
super( x , y );
this.z = z;
}
}
Faire, nous avons une annotation à faire qu'à Lombok?
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas possible à Lombok. Bien qu'il serait vraiment sympa, il nécessite la résolution de trouver le constructeur de la super classe. La super-classe n'est connu que par son nom le moment de Lombok est appelé. En utilisant les déclarations d'importation et le chemin pour trouver la classe réelle n'est pas trivial. Et lors de la compilation, vous ne pouvez pas simplement utiliser la réflexion pour obtenir une liste de constructeurs.
Il n'est pas totalement impossible, mais les résultats à l'aide de la résolution dans
val
et@ExtensionMethod
nous ont appris qu'il est difficile et sujette à erreur.Divulgation: je suis un Lombok développeur.
inConstructor
méthode de constructeur annotations où l'on peut spécifier le constructeur desuper
est de Lombok injecter dans le constructeur généré?De Lombok À La Question N ° 78 les références de cette page https://www.donneo.de/2015/09/16/lomboks-builder-annotation-and-inheritance/ avec cette belle explication:
J'ai aussi trouvé cela fonctionne très bien avec Spring Data JPA.
Lombok ne prend pas en charge qui a également indiqué par la prise de toute
@Value
annoté de la classefinal
comme vous le savez, en utilisant@NonFinal
).La seule solution que j'ai trouvé est de déclarer tous les membres de la finale-vous et utilisez le
@Data
annotation à la place. Les sous-classes doivent être annotés par@EqualsAndHashCode
et le besoin explicite de tous les arguments du constructeur comme Lombok ne sais pas comment en créer un à l'aide de la toute args l'un des super-classe:En particulier les constructeurs de la sous-classes en font une solution un peu en désordre, pour les super-classes avec de nombreux membres, désolé.
@EqualsAndHashCode
"? N'est-ce pas annotation inclus par@Data
? Thx 🙂pour les super-classes avec de nombreux membres, je vous suggère d'utiliser @Délégué
Si l'enfant de la classe a plus de membres, que parent, il pourrait être fait pas très propre, mais court chemin: