码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础 (6) - 枚举

时间:2019-09-07 00:33:17      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:二进制   col   常量   hit   无法   tco   ofo   解决   turn   

能解决
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

Java基础 (6) - 枚举

标签:二进制   col   常量   hit   无法   tco   ofo   解决   turn   

原文地址:https://blog.51cto.com/4397014/2436223

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!