在哪个网站开发外贸业务,sap.net网站开发,在哪找公众号,网页程序开发工具java枚举类中字段有没有必要加final 今天在写一个系统统一返回码的枚举类时候#xff0c;突然想到一个问题#xff0c;当不小心手抖给枚举类自动生成了set方法#xff0c;而恰巧在用的地方不小心用了set方法#xff0c;从而修改了code值#xff0c;由于枚举类是天然单例突然想到一个问题当不小心手抖给枚举类自动生成了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;
}