Groovy - 无法在注释中使用静态最终字符串

Ner*_*rve 2 groovy

有些事情真的很奇怪。我在注释值中使用静态最终字符串。

class Constants {
    static final String myConstant = "ting tong"   
}

class Service {
    @CacheEvict(cacheNames = Constants.myConstant)
    void doSomethingNice() {    
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我就是无法编译它。

这是错误消息

属性“myConstant”应具有类型“java.lang.String”;但在 @org.springframework.cache.annotation.CacheEvict 中发现类型“java.lang.Object”

预期“Constants.getMyConstant()”是 @org.springframework.cache.annotation.CacheEvict 中 java.lang.String 类型的内联常量

可能是什么问题?这在 Java 中完美运行

Rot*_*tem 5

一般来说,将常量保存在接口下而不是类下是一个很好的做法。

interface Constants {
    public static final String myConstant = "ting tong"   
}
Run Code Online (Sandbox Code Playgroud)

另一个好的做法是将常量定义为static final而不仅仅是 Final,因为为每个常量仅创建 1 个实例会更有效。