[JAVA] Eine Notiz, die ich aufgegeben habe, um eine benutzerdefinierte Anmerkung für Lombok zu erstellen

Dies ist ein Memo, das ich aufgegeben habe, um eine benutzerdefinierte Anmerkung für Lombok zu erstellen.

Zusammenfassung in 3 Zeilen:

  1. Die Annotation-Implementierung von Lombok bezieht sich auf Java-Innenklassen (compilerbezogen).
  2. Seit Java9 hat sich die Methode zum Verweisen auf innere Java-Klassen je nach Build-System und IDE erheblich geändert, und der Schwierigkeitsgrad ist extrem hoch geworden.
  3. Lombok unterstützt keine Meta-Annotation, die Annotationen aggregiert. Es gibt also keine Möglichkeit, dies zu tun. Geben Sie auf.

Wie ich es versucht habe:

  1. @ Value Ich liebe es, aber ich kann den Verwendungsteil des von lombok aus Eclipse erstellten Getters mit Strg + Umschalt + F nicht rückwärts zeichnen. Es ist schwer zu sagen.
  1. Erstens ist es "@ Value", um "@ToString @EqualsAndHashCode @ AllArgsConstructor" als unveränderliche Datenstruktur zusammenzufügen, und Getter ist als persönliche Präferenz nicht erforderlich. Das Feld als Datenstruktur ist in "öffentliches Finale" unterteilt.
  2. Okay, machen wir eine benutzerdefinierte Anmerkung ... Nun, das Quellpaket von @ Value, der Stelle, an der die Funktion @ Getter aufgerufen wird, sollte gelöscht werden.

Also habe ich zuerst Iroha gegoogelt, um benutzerdefinierte Anmerkungen mit Lombok zu machen:

Ja, ich habe es erwartet, aber es scheint aufgrund der Java-Bytecode-Operation ärgerlich und schwierig zu sein. Ich frage mich, ob ich aufhören soll ... Nein, ich möchte zuerst "@ Value- @ Getter" machen. Was ist also mit dem Quellcode von "@ Value"?

--Anmerkung

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);

Es scheint, dass Sie sich bis zu diesem Punkt selbst kopieren und einfügen können, aber plötzlich "Das ... Übrigens, ich verwende das System com.sun.tools ... Ich bin von der Einführung des Java9-Moduls hier betroffen. Was soll ich also tun? Ich bin ratlos.

Vorerst habe ich den Artikel gegoogelt, als ich mich mit com.sun.tools mit maven bis zur java8-Ära befasste.

Oh ja, es war so. Dann schauen wir uns an, was mit java9 passiert ist ...

Es ist wirklich verdächtig, in die Wolken zu gehen. Oder besser gesagt, es schreit schon. Gefährlich. Wenn Sie sich die Korrespondenz auf der Eclipse-Seite kurz ansehen, scheint es, dass die Inhalte zwar leicht unterschiedlich sind, aber alle Schwierigkeiten haben, auf die innere Java-Klasse zuzugreifen:

--Java - Über eingeschränkten Klassenzugriff | teratail

Das ist schlecht. Die Anpassung von maven / pom.xml scheint zunächst gefährlich zu sein, und die Kombination von maven / eclipse erhöht auch die Komplexität.

Erstens scheinen https://github.com/peichhorn/lombok-pg, eine Sammlung von benutzerdefinierten Lombok-Anmerkungen von Drittanbietern (die ich zum ersten Mal in dieser Umfrage erfahren habe), und Lombok selbst mit Ant erstellt worden zu sein. Atmosphäre, die für Eclipse IDE ziemlich angepasst ist. (Ich bin nicht sicher, ob es in die IDE integriert ist oder für die Entwicklung mit der IDE, aber es scheint trotzdem ziemlich nervig zu sein)

Ich habe einen Artikel gefunden, der es schwierig macht, Lombok mit Java 9 oder höher zu warten.

--Lomboks Java 9 oder höher Support Story - Qiita

Wenn benutzerdefinierte Annotationen nicht funktionieren, können wir dann eine Meta-Annotation erstellen, die vorhandene Annotationen aggregiert? Ich habe versucht zu googeln ...

Anscheinend scheint es schwierig und es wird nicht unterstützt.

In Anbetracht des oben Gesagten möchte ich nur das Hinzufügen der folgenden Anmerkungen vereinfachen ... Trotzdem sind die Kosten für die Realisierung ungewöhnlich hoch.

@AllArgsConstructor
@EqualsAndHashCode
@ToString
(In manchen Fällen@With )

Daher werde ich dieses Mal aufhören, benutzerdefinierte Anmerkungen zu erstellen und nur das zu kopieren, was ich sicher benötige.

Recommended Posts

Eine Notiz, die ich aufgegeben habe, um eine benutzerdefinierte Anmerkung für Lombok zu erstellen
Ich möchte eine generische Anmerkung für einen Typ erstellen
Ein problematischer Hinweis beim Versuch, nginx mit Remote-Containern von vscode zu verwenden
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Ich habe versucht, eine Web-API zu erstellen, die mit Quarkus eine Verbindung zur Datenbank herstellt
Ich habe ein Programm erstellt, das aus dem mit Java überladenen Prozess nach der Zielklasse sucht
[Hinweis] Eine Liste von Befehlen, die ich nach dem Versuch mit Ruby viele Male überprüft habe.
[Android] Ich möchte einen ViewPager erstellen, der für Tutorials verwendet werden kann
Ich suchte nach einem leichten Framework, das das plötzliche "schnell machen" beantworten würde.
Ich habe Java gemacht, um (a == 1 && a == 2 && a == 3) immer wahr zu machen
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
So erstellen Sie eine leichte JRE für den Vertrieb
MockMVC gibt 200 zurück, auch wenn ich eine Anfrage an einen Pfad stelle, der nicht existiert
Eine Geschichte über die Schwierigkeiten beim Versuch, PHP 7.4 auf CentOS 8 von GCE zu erstellen
Ich habe den lesbaren Code gelesen, machen Sie sich also eine Notiz
Ich habe eine Methode entwickelt, um nach Premium Friday zu fragen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Wie erstelle ich einen MOD für Slay the Spire?
[Java] Ich habe versucht, ein Janken-Spiel zu erstellen, das Anfänger auf der Konsole ausführen können
Der Artikel für Neuankömmlinge hat mich inspiriert. Notieren Sie ihn sich, damit Sie Ihre ursprünglichen Absichten nicht vergessen.
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich wollte nur eine reaktive Eigenschaft in Java erstellen
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich habe einen RESAS-API-Client in Java erstellt
Ich wollte eine Zeile animieren, wenn ich Realm und RecyclerView unter Android verwende, aber ich habe aufgegeben
Wie gehe ich mit dem Typ um, den ich 2 Jahre lang über das Schreiben eines Java-Programms nachgedacht habe?