1.为何使用枚举
(1)实际变成中,通常需要一些常量数据集,如周一到周日,性别等,通过枚举就可以表示
(2)需要一些常量key-value集合,当然可以使用全局单例map,但是用枚举更好实现
2.枚举使用
(1)简单定义常量集
public enum GenderEnum
{
man,women;
}
遍历所有常量
@Test
public void test() {
for(GenderEnum ge: GenderEnum.values())
System.out.println(ge);
}
结果为:
man
women
可以看出,其中每一个常量都是GenderEnum类型的(不然循环不可能取出GenderEnum),
所以可以将其中的man、women看做是GenderEnum的实例
这么来想的话,是不是可以写个构造方法,或者说添加属性,这样的话,每个常量就有了自己的属性。如果是一个属性,不就实现了map的作用吗?
而jdk枚举已经提供了支持
(2)添加构造方法和属性
public enum GenderEnum
{
man("peter"),women("lisa");
//成员变量
private String value;
//构造函数
private GenderEnum(String value)
{
this.value = value;
}
//getter
public String getValue()
{
return value;
}
}
测试:
@Test
public void test() {
for(GenderEnum ge: GenderEnum.values())
System.out.println(ge.getValue());
}
结果为:
peter
lisa
这么来看, 枚举也就看做一个普通的类,常量只是当前类的对象而已。
3.原理
使用javap命令反编译可以看出:
实际上就是和我们猜想的一样,常量man、women都是本类的实例而已