2016-07-15 13 views
1

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?

+0

Sie können nicht. Dies muss eine Kompilierzeitkonstante sein. – Opal

Antwort

3

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.