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‘相关推荐

  1. Throwable是java.lang包中一个专门用来处理异常的类

    答:Throwable是java.lang包中一个专门用来处理异常的类.它有两个子类,即Error 和Exception,它们分别用来处理两组异常. Error用来处理程序运行环境方面的异常,比如,虚 ...

  2. Java 错误:找不到或无法加载主类(源文件中含有包名 package)

    1. 问题定位 编译(javac)和执行(java)java 程序时,出现这种类型的错误:找不到或无法加载主类: 首先排除是否是环境变量配置不当造成的问题,只要保证,命令行界面能够识别 javac/j ...

  3. java一个项目只有一个主类吗_组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方main()。...

    组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方main(). A:对 B:错 正确答案:对 解析: 组成Java Application的若干类中,有且仅有一个主 ...

  4. java报错-找不到或无法加载主类(Error: Could not find or load main class)

    此文首发于我的个人博客:java报错-找不到或无法加载主类(Error Could not find or load main class) - zhang0peter的个人博客 比如说test.ja ...

  5. 【JAVA】错误: 找不到或无法加载主类 HelloWorld

    [JAVA]错误: 找不到或无法加载主类 HelloWorld 1. 问题描述 在本地使用记事本创建文件并且使用java和javac来编译与执行时出现错误 命令以及提示如下: root>java ...

  6. abstract类中不可以有private的成员_C++ 类:声明成员函数与实现

    接上文... 16.3类的成员 2.成员函数 1.构造函数 ... 2.拷贝构造函数 有了类的构造函数我们就可以创建类的实例了,下图中分别使用不同的构造函数一共创建了4个动物的对象,现在程序中就有4个 ...

  7. C++中模板类中的成员函数以及模板函数在类外定义

    在C++中,类中的成员函数可以在类外完成定义,从而显得类中的成员函数看起来简洁明了.但是模板类里的成员函数和模板函数与普通的成员函数在类外定义不同. 先定义一个模板类以及成员函数和模板函数: 接下我们 ...

  8. Idea一键自动导包设置--导入类中所有包?教你自动更新类中包含的包

    在日常的拷贝复用代码中,导包的重复性工作非常繁琐,在这里分享一个idea设置. 动态效果演示: Idea一键自动导包设置--导入类中所有包?教你自动更新类中包含的包 操作步骤: File-->S ...

  9. 运行JAVA程序发现找不到或无法加载主类问题解决方法

    首先确保javac编译文件可以生成class文件. 在使用java该文件的时候出现找不到或无法加载主类问题: 首先看看环境变量中CLASSPATH里面有没有".;%JAVA_HOME%\li ...

最新文章

  1. 调研字节码插桩技术,用于系统监控设计和实现
  2. xp系统如何将计算机放到桌面快捷方式,如何整理xp系统电脑桌面快捷方式图标...
  3. ISME:沈农栾军波组揭示水平转移基因的功能
  4. 概率x^2 t F三大分布的联系
  5. Powershell指令集_2
  6. PHPRPC for PHP
  7. Resnet的pytorch官方实现代码解读
  8. Android 博客园客户端 (八) 下拉刷新、分页,AsyncTask
  9. 浪潮服务器建立虚拟驱动器,像《十二时辰》一样去建立标准! 浪潮这款服务器做到了...
  10. 双协议栈服务器,10. 搭建双协议栈Web服务器:使用IPv6地址、IPv4
  11. (20)VHDL移位寄存器
  12. SAP License:BCS进阶第一篇-BCS相关概念
  13. 病毒行为分析初探(二)
  14. 2.Docker安装软件和制作自己的镜像
  15. 4种解决json日期格式问题的办法
  16. 牛顿法求临界水深c语言程序,基于牛顿迭代法的圆形断面临界水深直接计算法邹武停.pdf...
  17. 吉大17秋计算机应用二,吉大17秋《计算机应用基础》在线作业二.doc
  18. 配置chrony服务,实现服务器时间自动同步
  19. Andrej Karpathy读博建议和写论文的方法
  20. li-poly_GitHub - kinglisky/lowpoly: low poly图片风格化工具

热门文章

  1. 机器人总动员拟人后_WALL·E 机器人总动员——又是一部让名字耽误的高分电影...
  2. android一个工程的xml怎么引用另外一个工程的xml,如何在Android中使用XML引用库中另一个包的字符串?...
  3. s查找mysql服务_MySQL菜鸟实录(一):MySQL服务安装实战
  4. figure服务器无法显示,求大神帮帮忙,看一下为什么第二个figure出不来,只能显示第一个...
  5. scala 转换为字符串_如何在Scala中将字符串转换为布尔值?
  6. 第 1-1 课:Java 程序是如何执行的?
  7. IDEA 不为人知的 5 个骚技巧!真香!
  8. 高质量SQL的30条建议!(后端必备)
  9. 经典面试题:如何保证缓存与数据库的双写一致性?
  10. 十六、Python操作excel(.xlsx)封装类MyPyExce