有些东西真的很奇怪。 我在注释值中使用静态最终字符串。
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中非常有效
答案 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个实例更有效。