日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘

發布時間:2025/3/12 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java枚舉類中字段有沒有必要加final

今天在寫一個系統統一返回碼的枚舉類時候,突然想到一個問題,當不小心手抖給枚舉類自動生成了set方法,而恰巧在用的地方不小心用了set方法,從而修改了code值,由于枚舉類是天然單例,所以造成整個環境中的code的變更,想到這兒后背有點涼。

public enum CommonCodeEnum {TASK_REPEAT_START_TIMING(30000, "任務狀態為計時中,不能重復開啟"),TASK_REJECT_EXCEPTION(30001, "任務駁回失敗"),TASK_WITHDRAW_EXCEPTION(30002, "任務撤回失敗"),SYSTEM_ERROR(50000, "系統錯誤");private int code;private String msg;CommonCodeEnum(int code, String msg) {this.code = code;this.msg = msg;}public int getCode() {return code;}public String getMsg() {return msg;}// 這兩個set方法工具自動生成,沒刪掉public void setCode(int code) {this.code = code;}public void setMsg(String msg) {this.msg = msg;} }

然后一個小朋友突發奇想,寫了這么一句

CommonCodeEnum.TASK_REPEAT_START_TIMING.setCode(100);

想在方法中動態改變,然后再使用自定義的值,但是他忽略的枚舉類的單例屬性,這樣做會使整個環境的值變為新值,當然這樣的操作在現實中基本上不會發生,當然為了做到萬無一失,還是將枚舉類的字段設置為final更佳,這樣工具也無法生成set方法。

private final int code; private final String msg;

生成set方法會提示

沒有可以生成set方法的字段。
最后建議枚舉類的字段加上final,養成好習慣,細節決定成敗。

枚舉類字段 Field ‘xxx‘ may be ‘final‘

需求

寫枚舉類時發現IDEA提示如下警告,看著老不舒服,那么我們要不要處理Field 'xxx' may be 'final' 呢?

分析

枚舉的值都是固定的,且是全局唯一的,用 java 的術語來說就是單例的,所以我們寫枚舉類時一般都不會給自定義屬性寫Setter方法。本著單例思想,我們還是加上final。

結論

最好加上 final

@Getter @AllArgsConstructor public enum TypeEnum {NAME_TYPE("名稱類型","NAME_TYPE"),VALUE_TYPE("值類型","VALUE_TYPE"),;private final String name;private final String value; }

總結

以上是生活随笔為你收集整理的java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。