加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java基础 (6) - 枚举

发布时间:2020-12-15 07:50:55 所属栏目:Java 来源:网络整理
导读:能解决 1.类或方法强制使用者传入预设的值 2.性能相对常量更好 - (Android环境除外) 使用办法 public enum ColorEnum{ WHITE("0x000001"),BLACK("0x000002"),GREEN("0x000003"); private final String color; private ColorEnum(String color){ this.color =
能解决
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读