繁体   English   中英

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

[英]Is there a way to pass a constant to an annotation in Groovy?

在Java中,可以将常量String作为参数传递给注释,但我无法弄清楚如何在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注释方法myMethod ,如果我传递像@MyGroovyAnnotation(value="Something")这样的字符串文字,它可以很好地工作,但是如果我尝试像上面的例子中那样传递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的声誉。

这里建议类似的问题( access-static-field-in-annotation )与此不同,因为答案是使String final,这就是这里的情况。 我已经找到了一种方法来完成这项工作,所以我想我最好在这里回答有同样问题的其他人! :)

上面的代码不起作用,但指定要作为另一个类中的字段传递给注释的String工作正常,奇怪的是:

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

    class Constants {
        public static final String VALUE = "Something"
    }

    public class MyGroovyClass {

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

我不确定为什么其中一种情况有效而另一种情况无效。 阅读上述类似问题中提到的bug中的注释,似乎Groovy开发人员遇到了一些问题,这些问题涵盖了Java将常量String引用作为注释参数传递的所有情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM