In Java kann ich @SomeAnnotation("abc"+"cd")
schreiben. Wenn ich das gleiche in groovy mache, habe ich den Kompilierungsfehler 'erwartet ... eine Inline-Konstante' zu sein. Wie kann ich String-Konstanten innerhalb von Annotationen in groovy verketten?Groovy: Wie verketten String-Konstanten in Annotation?
Antwort
Sie können nicht, da dieser Ausdruck in Groovy keine Kompilierzeitkonstante ist.
Sie haben ein paar Optionen hier
eine einfache Java-Schnittstelle mit Konstanten deklarieren und es von Groovy verwenden
@SomeAnnotation(Constants.MY_CONST)
Wenn Sie Quellcode Annotation ändern können Sie closure annotation parameters mit versuchen
Sie können auch mit compile-time AST transformations hier spielen, um Ihr Ziel auf schmutzige Weise zu erreichen. (Sehr wahrscheinlich wollen Sie nicht mit AST spielen)
Unfähigkeit Ausdrücke zu verwenden, wie 'aaa' + 'bbb'
ist nicht das einzige Problem, können Sie Fehler wie Attribute 'value' should have type 'java.lang.String'; but found type 'java.lang.Object'
sehen auch bei Kompilierung-Ausdrücken. Hier ist ein ähnliches Problem GROOVY-3278 mit möglichen Problemumgehungen.
Sie können nicht. Dies muss eine Kompilierzeitkonstante sein. – Opal