平时在工作的开发中, 发现同事用枚举用的特别溜, 你说自己知道吗? 感觉枚举自己是会用的, 但是自己觉得就是不够深刻, 应该是内心没有真正的掌握掉这个东西, 所以总是无意识的逃避使用这个, 或者说有时候真的想不起来用这个东西.
1. 枚举的优势
那接下来不得不来叨叨枚举的优势了, 它到底有什么好的, 让那么多人用这个呢?
增强代码可读性(装逼神器)
不得不说, 如果你用了枚举, 立马感觉你跟一般的程序员不一样了, 这个绝对是你装逼和吹牛逼的一个神器吧(嘿嘿)
去除equals两者判断 由于常量值地址唯一,使用枚举可以直接通过“==”进行两个值之间的对比,性能会有所提高。
编译优势(与常量类相比)
常量类编译时,常量被直接编译进二进制代码中,常量值在升级中变化后,需要重新编译引用常量的类,因为二进制代码中存放的是旧值。枚举类编译时,没有把常量值编译到代码中,即使常量值发生改变,也不会影响引用常量的类。
修改优势(与常量类相比)
枚举类编译后默认final class,不允许继承可防止被子类修改。常量类可被继承修改、增加字段等,易导致父类不兼容。
枚举型可直接与数据库交互。
Switch语句优势
使用int、String类型switch时,当出现参数不确定的情况,偶尔会出现越界的现象,这样我们就需要做容错操作(if条件筛选等),使用枚举,编译期间限定类型,不允许发生越界。
2. 常用场景
抛开业务谈设计, 一切都是扯淡, 所以你必须知道枚举的应用场景, 最重要的是你应该知道什么时候用它, 否则, 就算你知道怎么用, 但是不知道该用它了, 它还是摆设.
2.1 如果超过两个以上的常量的定义, 可以考虑使用枚举
一般我们定义常量都是需要public static final.... , 现在你要是会使用枚举, 直接换一个高逼格的枚举来搞定吧, 而且枚举也提供了比常量更多的方法.
public enum Color {
RED, GREEN, BLANK, YELLOW
}
2.2 在switch语句中, 可以考虑使用枚举
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
3. 枚举在工作中的一个应用
我们先