我想在Groovy中测试我的 Java 自定义注释,但由于char问题而没有管理它。
Groovyc:期待' a'是char类型的内联常量而不是@MyAnnotation
中的字段表达式
我知道groovy中的 char 被指定为
'a' as char
我的 Java 自定义注释
@Target({FIELD})
@Retention(RUNTIME)
@Documented
public @interface MyAnnotation {
char someChar() default '#';
}
不能使用 Groovy 代码
class Foo {
@MyAnnotation(someChar = 'a' as char)
Object hoo
}
如果将char提取为常量,则它也不起作用。
答案 0 :(得分:1)
这是一个棘手的问题......我发现工作的是:
import java.lang.annotation.Documented
import java.lang.annotation.ElementType
import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy
import java.lang.annotation.Target
import groovy.transform.CompileStatic
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation {
char someChar() default ('#' as char);
}
@CompileStatic
class Foo {
@MyAnnotation(someChar =( (char)'a'))
Object hoo
}
其中importart部分是注释定义中的as char
(除非是Java而不是Groovy),注释用法中的char
强制转换,而不是as char
,而是强制转换制作该课程@CompileStatic
。这似乎对我有用,但是如果你有权访问注释代码,你也可以把它改成一个String,因为我觉得我用String工作得更简单。