Ger*_*yan 23 groovy annotations
在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
}
}
Run Code Online (Sandbox Code Playgroud)
这里,在方法myMethod注释的地方@MyGroovyAnnotation,如果我传递一个字符串文字@MyGroovyAnnotation(value="Something"),它可以很好地工作,但是如果我尝试VALUE在上面的例子中传递,我得到:
来自Eclipse:
Groovy:Expected 'VALUE' to be an inline constant of type java.lang.String in @MyGroovyAnnotation
Run Code Online (Sandbox Code Playgroud)
从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
Run Code Online (Sandbox Code Playgroud)
有没有人知道我需要做些什么来使这个工作,或者甚至可能?感谢您提供的任何帮助或见解.
Jon*_*son 29
我遇到了同样的问题并且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
}
}
Run Code Online (Sandbox Code Playgroud)
我想对接受的答案发表评论,但我没有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
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么其中一种情况有效而另一种情况无效.阅读上述类似问题中提到的bug中的注释,似乎Groovy开发人员遇到了一些问题,这些问题涵盖了Java将常量String引用作为注释参数传递的所有情况.
| 归档时间: |
|
| 查看次数: |
8225 次 |
| 最近记录: |