Java: Generieren Sie benutzerdefinierten Java-Code zur Kompilierzeit mithilfe von Anmerkungen

9

Wie schreibe ich eine Java-innere Klasse mit benutzerdefinierten Eigenschaften zum Kompilieren mit Anmerkungen?

Zum Beispiel möchte ich das:

%Vor%

zum Generieren:

%Vor%

Wie kann ich die Schnittstelle schreiben:

%Vor%

Ich verstehe, dass ich eine Art AST-Transformation machen muss, um das magisch zu machen.

Ich kenne auch das Projekt lombok, aber ich möchte wissen, was der kleinste gemeinsame Nenner mit einem einfachen Beispiel ist, vorzugsweise innerhalb einer Methode, und vorzugsweise etwas, das ein guter Editor automatisch in Betracht ziehen würde, zum Beispiel RetentionPolicy. SOURCE für den Javac-Compiler, der in Intellij IDEA verwendet werden kann.

Projekt Lombok ist ein Code-kluges Tier und es ist schwierig, anzufangen.

Es muss einfacher sein, oder?

Irgendwelche Ideen?

    
momomo 23.09.2014, 20:17
quelle

1 Antwort

1

Sie können dies durch Reflexion tun, aber Ihre neue Klasse wird keine innere Klasse sein; Aber seien Sie gewarnt, Sie werden die statische Sicherheit verlieren.

Dies kann in zwei Schritten geschehen:

  1. Lesen Sie die annotierte Klasse über Reflektion und wandeln Sie sie in einen String um, der den Quellcode Ihrer neuen Klasse darstellt.
  2. Schreiben Sie diese Zeichenfolge in die Datei, kompilieren Sie diese Zeichenfolge mit der Java-Compiler-API und laden und instanziieren Sie dann die neue Klasse, alles programmatisch; siehe genaue Schritte hier .

Alternativen zu ähnlichen Funktionen können auch durch Bytecode-Instrumentierung erhalten werden (siehe cglib oder javassist ) oder vielleicht sogar mit Proxies .

    
m3th0dman 23.09.2014 21:16
quelle

Tags und Links