能解决
1.类或方法强制使用者传入预设的值
2.性能相对常量更好 - (Android环境除外)
使用办法
public enum ColorEnum{
WHITE("0x000001"),BLACK("0x000002"),GREEN("0x000003");
private final String color;
private ColorEnum(String color){
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
和类的区别
枚举是真正的 final,客户端不允许创建枚举类的实例,也不能对其进行拓展
public class Color {
public static final Color WHITE = new Color(),
BLACK = new Color(),
GREEN = new Color();
private Color() { }
}
和常量的区别
1) 无法限制开发员继承/实现接口. (枚举是final的构造方法是私有的)
2) 常量作为参数时,是String,int等弱类型,开发员传入没有在常量接口里定义的值,这个问题无法通过编译器发现.
(常量无法 限制开发人员传入的参数数值,而枚举可以在编译阶段强制要求开发人员传入规定数值)
3) 由于开发员可以直接写常量值, 所以不能用==对比,只能用equals对比,不能优化性能
(枚举 equals 也会转化为 == 可参考 https://www.cnblogs.com/xiohao/p/7405423.html )
4) 编译时,是直接把常量的值编译到类的二进制代码里,常量的值在升级中变化后,需要重新编译所有引用常量的类,因为里面存的是旧值. (常量是装载的时候放入堆里,如果发生变化,需要重新编译装载)
参考:
https://www.cnblogs.com/kailejun/p/6624471.html
https://blog.csdn.net/lishuangling21/article/details/71398925
https://blog.csdn.net/hzy38324/article/details/72566678
Android中枚举情况:
https://www.cnblogs.com/zgz345/p/5871351.html
Android中枚举替代方案
https://www.jianshu.com/p/f8ac84a3e3c1
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款