Groovy常量字符串作为注释值
给定以下类(编辑器是包名):Groovy常量字符串作为注释值,groovy,Groovy,给定以下类(编辑器是包名): JavaClass按预期工作,但GroovyClass会给出这些编译器错误(在代码中注释)。我不确定出了什么问题。。如何在groovy中为注释值分配字符串常量?您必须按类名访问它 import java.lang.annotation.* @Target([ElementType.FIELD]) @Retention(RetentionPolicy.RUNTIME) @interface Annot { String value(); } class Groov
JavaClass按预期工作,但GroovyClass会给出这些编译器错误(在代码中注释)。我不确定出了什么问题。。如何在groovy中为注释值分配字符串常量?您必须按类名访问它
import java.lang.annotation.*
@Target([ElementType.FIELD])
@Retention(RetentionPolicy.RUNTIME)
@interface Annot {
String value();
}
class GroovyClass {
static final TEST_STRING = 'test'
@Annot(GroovyClass.TEST_STRING) private int a;
// FAILS static final TEST_GSTRING = "test$TEST_STRING"
// FAILS @Annot(GroovyClass.TEST_GSTRING) private int b;
}
assert GroovyClass.getDeclaredField('a').annotations.first().value()==GroovyClass.TEST_STRING
// FAILS assert GroovyClass.getDeclaredField('b').annotations.first().value()==GroovyClass.TEST_GSTRING
Groovy 2.3GroovyClass中的第一个@Annot是TEST\u GSTRING。你是说TEST_字符串吗?如果我想从JavaClass访问GroovyClass.TEST_字符串呢?它因“注释属性Annot.value的值必须是常量表达式”而失败。不管您如何回答我最初的问题,谢谢,我都会接受。据我所知,TEST_字符串被(静态)getter替换,就像常规属性一样。所以这可能会抛开java的一面。谢谢,伙计,这让我发疯了。我在我的父类中为TestNG准备了一切。我大量使用TestNG组,我讨厌到处使用字符串。
import java.lang.annotation.*
@Target([ElementType.FIELD])
@Retention(RetentionPolicy.RUNTIME)
@interface Annot {
String value();
}
class GroovyClass {
static final TEST_STRING = 'test'
@Annot(GroovyClass.TEST_STRING) private int a;
// FAILS static final TEST_GSTRING = "test$TEST_STRING"
// FAILS @Annot(GroovyClass.TEST_GSTRING) private int b;
}
assert GroovyClass.getDeclaredField('a').annotations.first().value()==GroovyClass.TEST_STRING
// FAILS assert GroovyClass.getDeclaredField('b').annotations.first().value()==GroovyClass.TEST_GSTRING