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

时间:2016-10-14 08:04:57

标签: groovy

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

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

class Service {
    @CacheEvict(cacheNames = Constants.myConstant)
    void doSomethingNice() {    
    }
}

但是,我不能让它编译。<​​/ p>

这是错误消息

  

属性'myConstant'应该有'java.lang.String'类型;但发现了   在中输入'java.lang.Object'   @ org.springframework.cache.annotation.CacheEvict

     

期望'Constants.getMyConstant()'是类型的内联常量   @ org.springframework.cache.annotation.CacheEvict

中的java.lang.String

可能是什么问题?这在Java中非常有效

2 个答案:

答案 0 :(得分:2)

事实证明问题是由于Groovy的自动getter / setter生成造成的。它会为我的常量生成一个getter并在注释中使用它,我猜这是不允许的。

要修复此问题,请将该字段标记为公开。这将禁用自动吸气剂生成。

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

答案 1 :(得分:2)

通常,将常量保持在接口下而不是在类下是一个好习惯。

interface Constants {
    public static final String myConstant = "ting tong"   
}

另一个好的做法是将常量定义为静态最终而不仅仅是最终,因为为每个常量仅创建1个实例更有效。