[英]Groovy - Unable to use static final string in an annotation
有些東西真的很奇怪。 我在注釋值中使用靜態最終字符串。
class Constants {
static final String myConstant = "ting tong"
}
class Service {
@CacheEvict(cacheNames = Constants.myConstant)
void doSomethingNice() {
}
}
但是,我無法編譯它。
這是錯誤信息
屬性“myConstant”的類型應該是“java.lang.String”; 但在@org.springframework.cache.annotation.CacheEvict 中發現類型'java.lang.Object'
預期 'Constants.getMyConstant()' 是 @org.springframework.cache.annotation.CacheEvict 中 java.lang.String 類型的內聯常量
可能是什么問題? 這在 Java 中完美運行
一般來說,將常量保存在接口下而不是類下是一個很好的做法。
interface Constants {
public static final String myConstant = "ting tong"
}
另一個好的做法是將常量定義為static final而不僅僅是 final,因為為每個常量只創建 1 個實例會更有效。
結果證明問題是由於 Groovy 的自動 getter/setter 生成造成的。 它會為我的常量生成一個 getter 並在注釋中使用它,我想這是不允許的。
要修復,請將字段標記為公開。 這將禁用自動吸氣劑生成。
class Constants {
public static final String myConstant = "ting tong"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.