枚举的定义

枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。

回忆一下下面的程序,这是在没有枚举类型时定义常量常见的方式

public class DayDemo {

public static final int MONDAY =1;

public static final int TUESDAY=2;

public static final int WEDNESDAY=3;

public static final int THURSDAY=4;

public static final int FRIDAY=5;

public static final int SATURDAY=6;

public static final int SUNDAY=7;

}

上述的常量定义常量的方式称为int枚举模式,这样的定义方式并没有什么错,但它存在许多不足,如在类型安全和使用方便性上并没有多少好处,如果存在定义int值相同的变量,混淆的几率还是很大的,编译器也不会提出任何警告,因此这种方式在枚举出现后并不提倡,现在我们利用枚举类型来重新定义上述的常量,同时也感受一把枚举定义的方式,如下定义周一到周日的常量


//枚举类型,使用关键字enum
enum Day {
MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

也可以直接定义为内部类

public class DayTime {

enum Day {
MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

}

枚举的常见方法

name():返回此枚举常量的名称,在其枚举声明中对其进行声明。类型是String

toString():返回此枚举常量的名称,在其枚举声明中对其进行声明。类型是String (该方法可被重写)

valueOf(Class enumType, String name):根据枚举类的Class对象和枚举名称返回枚举常量

所以Day.valueOf("MONDAY")Day.MONDAY 是相同的。

枚举的键值使用方法

通过定义枚举中的私有属性和重载构造方法来实现

通过只提供getter来获取常量值


enum Day {
MONDAY(1), TUESDAY(2), WEDNESDAY(3),
THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7);

private int dayNumber;

Day(int dayNumber) {
this.dayNumber = dayNumber;
}

// 可选提供getter
public int getDayNumber() {
return dayNumber;
}

}

使用:

// 获取常量
Day.MONDAY
// 获取常量值
Day.MONDAY.getDayNumber()

一般定义常量有三种方式,使用接口,使用类和使用枚举。这里推荐使用枚举的方式来定义常量。