java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘
java枚舉類中字段有沒有必要加final
今天在寫一個系統(tǒng)統(tǒng)一返回碼的枚舉類時候,突然想到一個問題,當(dāng)不小心手抖給枚舉類自動生成了set方法,而恰巧在用的地方不小心用了set方法,從而修改了code值,由于枚舉類是天然單例,所以造成整個環(huán)境中的code的變更,想到這兒后背有點涼。
public enum CommonCodeEnum {TASK_REPEAT_START_TIMING(30000, "任務(wù)狀態(tài)為計時中,不能重復(fù)開啟"),TASK_REJECT_EXCEPTION(30001, "任務(wù)駁回失敗"),TASK_WITHDRAW_EXCEPTION(30002, "任務(wù)撤回失敗"),SYSTEM_ERROR(50000, "系統(tǒng)錯誤");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;} }然后一個小朋友突發(fā)奇想,寫了這么一句
CommonCodeEnum.TASK_REPEAT_START_TIMING.setCode(100);想在方法中動態(tài)改變,然后再使用自定義的值,但是他忽略的枚舉類的單例屬性,這樣做會使整個環(huán)境的值變?yōu)樾轮?#xff0c;當(dāng)然這樣的操作在現(xiàn)實中基本上不會發(fā)生,當(dāng)然為了做到萬無一失,還是將枚舉類的字段設(shè)置為final更佳,這樣工具也無法生成set方法。
private final int code; private final String msg;生成set方法會提示
沒有可以生成set方法的字段。
最后建議枚舉類的字段加上final,養(yǎng)成好習(xí)慣,細(xì)節(jié)決定成敗。
枚舉類字段 Field ‘xxx‘ may be ‘final‘
需求
寫枚舉類時發(fā)現(xiàn)IDEA提示如下警告,看著老不舒服,那么我們要不要處理Field 'xxx' may be 'final' 呢?
分析
枚舉的值都是固定的,且是全局唯一的,用 java 的術(shù)語來說就是單例的,所以我們寫枚舉類時一般都不會給自定義屬性寫Setter方法。本著單例思想,我們還是加上final。
結(jié)論
最好加上 final
@Getter @AllArgsConstructor public enum TypeEnum {NAME_TYPE("名稱類型","NAME_TYPE"),VALUE_TYPE("值類型","VALUE_TYPE"),;private final String name;private final String value; }總結(jié)
以上是生活随笔為你收集整理的java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础day13
- 下一篇: SpringBoot的编码问题