What? enum
枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是
7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。在 JDK 1.5
之前没有枚举类型,那时候一般用接口常量来替代。而使用 Java 枚举类型 enum 可以更贴近地表示这种常量。
Why? enum
在实际开发过程中,我们会碰到很多类似于逻辑不同,但是要实现的业务内容有极其相似的需求,那碰到这种情况。一般来说用if-else的就可以解决,但如果很多了,难道说写一千个或者一万个,有的同学可能也会反驳,难道不能用case-when的方式来解决嘛,当然这样也是可以的,但我们的前提是"实现的业务内容有极其相似的需求",所以为了避免重复的造轮子,enum枚举成了我们的首选目标。
How? enum
- 创建一个枚举“类”
public enum TestEnum {
//5.声明详细的枚举类型
BABY(Crowd.baby),
YOUNG(Crowd.young),
YOUTH(Crowd.youTh),
MID(Crowd.mid);
//3.私有化枚举类型,私有化该枚举的调用
private Crowd crowd;
private TestEnum(Crowd crowd) {
this.crowd = crowd;
}
//4.提供一个外部可调用的公共方法
public void getCrowd(Person person) {
crowd.getTypeList(person);
}
//2.创建一个枚举
enum Crowd{
baby{
//6.重写外层枚举提供的抽象方法
@Override
public void getTypeList(Person person) {
person.setAge(1);
person.setLike("小汽车");
person.setAddress("海南");
person.setName("Sum");
}
}, young{
@Override
public void getTypeList(Person person) {
person.setAge(10);
person.setLike("奥特曼");
person.setAddress("上海");
person.setName("Jane");
}
}, youTh {
@Override
public void getTypeList(Person person) {
person.setAge(25);
person.setLike("挣钱");
person.setAddress("北京");
person.setName("Mary");
}
}, mid {
@Override
public void getTypeList(Person person) {
person.setAge(40);
person.setLike("足球");
person.setAddress("广州");
person.setName("John");
}
};
//且使用一个抽象方法,采用匿名内部类来实现
public abstract void getTypeList(Person person);
}
}
外部调用
public class Main {
public static void main(String[] args) {
Person person = new Person();
TestEnum.BABY.getCrowd(person);
System.out.println(person);
}
}
Person{name='Sum', address='海南', age=1, like='小汽车'}
case-when搭配enum的用法
当明确需求以及返回内容时,只是类型发生变化,用case-when搭配enum。代码即简洁且对于后续维护也非常方便,只需要新增类型就可以实现,修改后续的逻辑规则也非常简单。
结语:多用enum的方式可以更加近距离的感受到编程思想,枚举也是一种设计模式的体现。希望路过的大佬多多指教