[JAVA] Une note que j'ai renoncé à essayer de créer une annotation personnalisée pour Lombok

C'est un mémo auquel j'ai renoncé en essayant de créer une annotation personnalisée pour Lombok.

Résumé en 3 lignes:

  1. L'implémentation des annotations de Lombok fait référence aux classes internes Java (liées au compilateur).
  2. Depuis Java9, la méthode de référencement des classes internes Java a considérablement changé en fonction du système de construction et de l'EDI, et le niveau de difficulté est devenu extrêmement élevé.
  3. Lombok ne prend pas en charge la méta-annotation qui agrège les annotations, il n'y a donc aucun moyen de le faire, abandonnez.

Comment j'ai essayé de le faire:

  1. @ Value J'adore, mais je ne peux pas inverser la partie d'utilisation du getter créé par lombok depuis Eclipse avec Ctrl + Shift + F. C'est difficile à dire.
  1. En premier lieu, c'est «@ Value» pour vouloir attacher «@ToString @EqualsAndHashCode @ AllArgsConstructor» ensemble en tant que structure de données immuable, et getter n'est pas nécessaire comme préférence personnelle. Le champ en tant que structure de données est divisé en "public final".
  2. D'accord, faisons une annotation personnalisée ... Eh bien, le pack source de @ Value, l'endroit où la fonction @ Getter est appelée doit être supprimé.

Donc, j'ai d'abord cherché sur Iroha pour créer des annotations personnalisées avec Lombok:

Ouais, je m'y attendais, mais cela semble être ennuyeux et difficile à cause du fonctionnement du code octet de Java. Je me demande si je devrais arrêter ... Non, je veux créer @ Value- @ Getter en premier lieu, alors qu'en est-il du code source de @ Value?

--Annotation

handleFieldDefaults.generateFieldDefaultsForType(typeNode, annotationNode, AccessLevel.PRIVATE, true, true);
handleConstructor.generateAllArgsConstructor(typeNode, AccessLevel.PUBLIC, staticConstructorName, SkipIfConstructorExists.YES, annotationNode);
handleConstructor.generateExtraNoArgsConstructor(typeNode, annotationNode);
handleGetter.generateGetterForType(typeNode, annotationNode, AccessLevel.PUBLIC, true, List.<JCAnnotation>nil());
handleEqualsAndHashCode.generateEqualsAndHashCodeForType(typeNode, annotationNode);
handleToString.generateToStringForType(typeNode, annotationNode);

Il semble que vous puissiez vous copier et coller jusqu'à ce point, mais soudainement "Cela ... En parlant de cela, j'utilise le système com.sun.tools .... Je suis à perte.

Pour le moment, j'ai recherché l'article sur Google concernant com.sun.tools avec maven jusqu'à l'ère java8.

Oh ouais, c'était comme ça. Ensuite, regardons ce qui s'est passé avec java9 ...

C'est vraiment suspect d'aller dans les nuages. Ou plutôt, ça crie déjà. Dangereux. Si vous regardez rapidement la correspondance côté Eclipse, il semble que bien que le contenu soit légèrement différent, ils ont tous du mal à accéder à la classe interne Java:

--Java --À propos de l'accès restreint aux classes | teratail

C'est mauvais. L'ajustement de maven / pom.xml semble d'abord dangereux, et la combinaison de celui-ci et du côté Eclipse augmente également la complexité.

En premier lieu, il semble que https://github.com/peichhorn/lombok-pg, qui est une collection d'annotations personnalisées Lombok tierces (que j'ai apprises pour la première fois dans cette enquête), et Lombok lui-même sont construits à l'aide d'Ant. Ambiance assez ajustée pour Eclipse IDE. (Je ne sais pas si c'est intégré à l'IDE ou pour le développement avec l'IDE, mais cela semble quand même assez ennuyeux)

J'ai trouvé un article qui rend difficile la maintenance de Lombok avec Java 9 ou version ultérieure.

Eh bien, si les annotations personnalisées ne fonctionnent pas, pouvons-nous créer une méta-annotation qui regroupe les annotations existantes? J'ai essayé de google ...

Apparemment, cela semble difficile et il n'est pas pris en charge.

Compte tenu de ce qui précède, ce que je veux faire en premier lieu est de faciliter l'ajout des annotations suivantes ... Malgré cela, le coût de réalisation est anormalement élevé.

@AllArgsConstructor
@EqualsAndHashCode
@ToString
(Dans certains cas@With )

Par conséquent, cette fois, je renoncerai à créer des annotations personnalisées et ne copierai que ce dont j'ai besoin en toute sécurité.

Recommended Posts

Une note que j'ai renoncé à essayer de créer une annotation personnalisée pour Lombok
Je souhaite créer une annotation générique pour un type
Une note gênante lorsque vous essayez d'utiliser nginx avec des conteneurs distants de vscode
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
J'ai essayé de créer une API Web qui se connecte à DB avec Quarkus
J'ai créé un programme qui recherche la classe cible à partir du processus surchargé avec Java
[Note] Une liste de commandes que j'ai vérifiées plusieurs fois après avoir essayé Ruby.
[Android] Je souhaite créer un ViewPager pouvant être utilisé pour les didacticiels
J'ai recherché un framework léger qui répondrait au soudain "faites-le vite"
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Comment créer un JRE léger pour la distribution
MockMVC renvoie 200 même si je fais une demande vers un chemin qui n'existe pas
Une histoire sur le fait d'avoir du mal à construire PHP 7.4 sur CentOS 8 de GCE
J'ai lu le code lisible, alors prends note
J'ai fait une méthode pour demander la prime vendredi
J'ai essayé de créer une fonction de connexion avec Java
Comment faire un MOD pour Slay the Spire
[Java] J'ai essayé de créer un jeu Janken que les débutants peuvent exécuter sur la console
J'ai été inspiré par l'article destiné aux nouveaux arrivants, alors prenez-en note pour ne pas oublier votre intention initiale
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
Je veux faire une liste avec kotlin et java!
Je voulais juste créer une propriété réactive en Java
Je veux créer une fonction avec kotlin et java!
J'ai créé un client RESAS-API en Java
Je voulais animer une ligne lors de l'utilisation de realm et RecyclerView sur Android, mais j'ai abandonné
Comment gérer le type auquel j'ai pensé en écrivant un programme Java pendant 2 ans