groovy - 有没有办法将常量传递给 Groovy 中的注释?

标签 groovy annotations

在 Java 中,可以将常量字符串作为参数传递给注释,但我不知道如何在 Groovy 中执行相同的操作。

例如:

    @Retention(RetentionPolicy.RUNTIME)
    @Target(value=[ElementType.METHOD])
    public @interface MyGroovyAnnotation {
        String value()
    }

    class MyGroovyClass {

        public static final String VALUE = "Something"

        @MyGroovyAnnotation(value=VALUE)
        public String myMethod(String value) {
            return value    
        }
    }

在这里,如果我传递像 @MyGroovyAnnotation(value="Something") 这样的字符串文字,则方法 myMethod@MyGroovyAnnotation 进行注释 code>,它工作得很好,但是如果我尝试像上面的示例一样传递 VALUE,我会得到:

来自 Eclipse:

Groovy:Expected 'VALUE' to be an inline constant of type java.lang.String in @MyGroovyAnnotation

从 GroovyConsole 运行:

expected 'VALUE' to be an inline constant of type java.lang.String not a field expression in @MyGroovyAnnotation
 at line: 20, column: 31

Attribute 'value' should have type 'java.lang.String'; but found type 'java.lang.Object' in @MyGroovyAnnotation
 at line: -1, column: -1

有谁知道我需要做什么才能让它发挥作用,或者是否有可能?感谢您提供的任何帮助或见解。

最佳答案

我遇到了同样的问题,Gerard 的答案有效,但我不需要创建一个新的 Constants 类,只需引用现有的类即可。

例如:

@Retention(RetentionPolicy.RUNTIME)
@Target(value=[ElementType.METHOD])
public @interface MyGroovyAnnotation {
    String value()
}

class MyGroovyClass {

    public static final String VALUE = "Something"

    @MyGroovyAnnotation(value=MyGroovyClass.VALUE)
    public String myMethod(String value) {
        return value    
    }
}

我想对已接受的答案发表评论,但我没有 50 的声誉。

关于groovy - 有没有办法将常量传递给 Groovy 中的注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21286132/

相关文章:

date - Groovy日期代码产生意外的输出

Java:获取私有(private)成员的注释

unit-testing - 在 Spock 单元测试中,没有调用模拟方法

grails - 在IntelliJ中进行Grails集成测试时出现奇怪的错误消息

java - Groovy:变量赋值

java - Objectifyfilter 的注释

java - 我应该为我的注释创建一个常量类吗?

java - java注释如何与spring一起工作,它们是在运行时还是在启动时扫描的?

Java 注释

java - 使用cucumber v1.2.4时运行cucumber测试的方法没有签名