Java基础 (6) - 枚举

能解决

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值