Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy常量字符串作为注释值_Groovy - Fatal编程技术网

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.3

GroovyClass中的第一个@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