java中的枚举类型学习

喵先生的进阶之路

枚举,在java中看似很小的一部分,却帮我们解决了很多大问题。

为什么使用枚举

我们知道生活中的很多地方都可以使用枚举,但是很多人在实际编程的时候却很少使用枚举类型,是因为枚举类型不好用吗?我认为不是的,而是他们并不了解枚举。这也是我之前的状态。

不使用枚举,对status(状态)等一些数目有限的对象,我们通常会使用静态常量的形式来表示,比如下面这样:

public class Test() {
    private static final int CHECK_APPOINTMENT = 1;              // 预约中
    private static final int CHECK_PENDING_FEEDBACK = 2;         // 待反馈
    private static final int CHECK_FEEDBACK = 3;                 // 已反馈
    private static final int CHECK_ADMISSIBLE = 4;               // 已受理
    private static final int CHECK_ALREADY_CHECKED = 5;          // 已检定
    private static final int CHECK_RESERVATION_FAILURE = 6;      //预约失败
    ...
} 

这时候,就会这么使用这些变量:

test.setStauts(Test.CHECK_APPOINTMENT);

好,这样按规矩来,没有任何问题,这样写的基础是建立在小组中的每个人都对项目有足够的了解,并且记忆力还不能太差了。但是就怕有些人不安规矩来:

test.setStatus(123);

完了,傻眼了。所以这就体现了枚举类型比静态常量更加的安全。

枚举类型

我们这里说的枚举类型是enum类,和classinterface地位相同。

下面介绍几种简单的枚举类型的用法。

1.一般用法

还是上面的例子,我们将它换成是枚举类型。

public enum ProcessStatusCode {
    CHECK_APPOINTMENT("预约中(待预约)", (short)1),
    CHECK_PENDING_FEEDBACK("待反馈", (short)2),
    CHECK_FEEDBACK("已反馈(待受理)", (short)3),
    CHECK_ADMISSIBLE("已受理(待检定)", (short)4),
    CHECK_ALREADY_CHECKED("已检定(检定完成)", (short)5),
    CHECK_RESERVATION_FAILURE("预约失败", (short)6);
    
    private Short code;     // 代码
    private String name;    // 名称
    
    processStatusCode(String name, Short code) {
        this.name = name;
        this.code = code;
    }
}

首先,先定义枚举类型,需要说明的是,这里必须在开头就定义具体实例,然后才是定义变量,以及构造函数。

并且我们可以看到,在定义实例的时候,我们调用了构造函数,但是这是一种隐式的调用。

调用的时候很简单:

ProcessStatusCode.CHECK_APPOINTMENT

2.switch中使用枚举

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;  
        }  
    }  
}

我们看到,在switch...case语句使用枚举类型的时候,case中的值直接使用枚举类型的具体实例,这点与上面的有一点不同。

3.枚举类型中定义函数

与类相同,我们也是可以在枚举中定义自己的函数的。

public enum Color {  
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
    // 成员变量  
    private String name;  
    private int index;
      
    // 构造方法  
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
     
    public void display() {
        System.out.println("这是" + this.name + "色");
    }
} 

总结

我们说,什么是规范?规范就是一个团队写的代码像一个人写的一样。所以很多时候,虽然我们可以有很多的不同的方法去实现一个需求,但为什么我们经常能够听到说“这种写法更好”这样的话,就是为了让我们写出的代码更加容易理解,更加易读。

但是相反的,人们总是难免会有自己的想法,这样就不利于代码的一致性。而我们又需要这种一直性,所以就 有了想枚举类型这样的限制一些自己想法的东西出现了。

代码规范的出现,是因为有了合作的关系。现在的软件已经越来越多的是由团队进行编写,而不是一个人的工作,所以我们应该更加重视代码规范。


参考:https://blog.csdn.net/qq_2709...

阅读 1.9k

朴世超
个人学习总结与项目实战问题记录
336 声望
20 粉丝
0 条评论
你知道吗?

336 声望
20 粉丝
文章目录
宣传栏