Lombok.val können SieWie funktioniert Lombok.val tatsächlich?
Verwendung val als Typ einer lokalen Variablen Deklaration statt tatsächlich von die Art zu schreiben. Wenn Sie dies tun, wird der Typ vom Initialisiererausdruck abgeleitet. Die lokale Variable wird ebenfalls als endgültig festgelegt.
Also statt
final ArrayList<String> example = new ArrayList<String>();
Sie können
val example = new ArrayList<String>();
Ich habe schreiben versucht, einige der Forschung in zu tun, wie dies tatsächlich funktioniert, aber es scheint nicht zu sein eine riesige Menge an Informationen. Betrachtet man the github page, kann ich sehen, dass val
ein Anmerkungstyp ist. Die Annotation Typ wird dann anstelle einer tatsächlichen Annotation verwendet.
Mir war nicht einmal bewusst, dass Sie sogar Annotationstypen auf diese Weise verwenden könnten, aber beim Testen ist der folgende Code tatsächlich gültig. Ich bin mir jedoch immer noch nicht sicher, warum Sie den Typ auf diese Weise verwenden möchten.
public class Main
{
public @interface Foo { }
public static void main(String... args)
{
Foo bar;
System.out.println("End");
}
}
Wie funktioniert Lombok Prozess diese Verwendungen, wenn sie nicht Anmerkungen, aber Anmerkung Typen? Zu meinem (offensichtlich falsch) Verständnis, sollte die Syntax eher wie:
@Val foo = new ArrayList<String>();
(ich bin mir bewusst, Einschränkungen von Annotationen des oben bedeuten, ist nicht gültig Syntax)
Danke! Und danke für eine tolle Bibliothek. Kannst du mich auf den Platz in GitHub hinweisen, der den Ersatz macht? Ich bin interessiert. – Michael
Für Eclipse und ecj, siehe https://github.com/rzwitserloot/lombok/blob/master/src/eclipseAgent/lombok/eclipse/agent/PatchVal.java und https://github.com/rzwitserloot/lombok/blob /master/src/eclipseAgent/lombok/eclipse/agent/PatchValEclipse.java, für javac, siehe https://github.com/rzwitserloot/lombok/blob/master/src/core/lombok/javac/handlers/HandleVal.java –