簡體   English   中英

Groovy - 無法在注釋中使用靜態最終字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM