怎么把Java枚舉名稱(chēng)作為注解的屬性值

一、前言

  • Java注解的屬性值,必須為 常量
  • 有些場(chǎng)景想把 枚舉名稱(chēng) 設(shè)置為 注解的屬性值(如 spring-cache 用枚舉配置緩存,使用時(shí) 需要 緩存名稱(chēng))

二、方案

  • 方案一:名稱(chēng)屬性 + 外部名稱(chēng)接口
@lombok.Getter
@lombok.AllArgsConstructor
public enum CommonCacheConfig {
    QUOTE_LEVEL(CommonCacheConstant.QUOTE_LEVEL, 2);

    private final String name;

    private final int ttl;
}
public interface CommonCacheConstant {

    String QUOTE_LEVEL = "QUOTE_LEVEL";

}

使用:@Cacheable(cacheNames = CommonCacheConstant.QUOTE_LEVEL)

  • 方案二:名稱(chēng)屬性 + 內(nèi)部名稱(chēng)接口
public enum CommonCacheConfig {
    QUOTE_LEVEL(Constant.QUOTE_LEVEL, 2);

    private final String name;
    private final Integer ttl;

    public interface Constant {
        String QUOTE_LEVEL = "QUOTE_LEVEL";
    }
}

使用:@Cacheable(cacheNames = CommonCacheConfig.Constant.QUOTE_LEVEL)

  • 方案三:Lombok 的 FieldNameConstants
@lombok.Getter
@lombok.AllArgsConstructor
@lombok.experimental.FieldNameConstants(onlyExplicitlyIncluded = true)
public enum CommonCacheConfig {

    @FieldNameConstants.Include QUOTE_LEVEL(2);

    private final Integer ttl;

}

使用:@Cacheable(cacheNames = CommonCacheConfig.Fields.QUOTE_LEVEL)
注意:FieldNameConstants 的 onlyExplicitlyIncluded 需設(shè)置為 true,否則 按枚舉的屬性(如 ttl)生成,同時(shí)在 枚舉項(xiàng)前加 @FieldNameConstants.Include

三、總結(jié)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容