10.枚举的使用
首先我们要知道什么是枚举,为什么要用枚举。
我们在日常使用中,有时候,变量的取值只在一个有限的集合内。例如:销售的服装或奶茶店只有小、中、大、超大这四种尺寸。当然,可以将这些尺码分别编码为1、2、3、4或者S、M、L、X。但这样存在着一定的隐患。在变量中很有可能保存的是一个错误的值(例如0或者m)。针对这种情况,可以自定义枚举类型。这样就可以将变量的值限制在枚举内。枚举类型包括有限个命名的值。例如:
enum Size{ SMALL,MEDIUM,LARGE,EXTRA_LARGE };
现在可以声明这种类型的变量:
Size s = Size.MEDIUM;
Size类型的取值只能是这几个值得其中一个或者null值。
实际上,这个声明定义的枚举是一个类,而它刚好有四个实例。所以在比较两个枚举类型的值时,不需要调用equals,而直接使用“==”就可以。
如果有需要的话,可以在枚举类内添加一些构造方法。当然,构造方法只是在构造枚举常量的时候被调用。例如
public enum Size{
SMALL("S"),MEDIUM("M"),LARGE("L"),EXTAR_LARGE("XL");
private String abb;
private Size(String add){
this.abb = abb;
}
public String getAbb(){return abb;};
}
所有的枚举类型都是Enum类的子类,他们继承这个类的许多方法。常见的就是toString(),这个方法能返回枚举常量名。例如,Size.SMALL.toString()将返回字符串"SMALL".
toString的逆方法是静态方法valueOf().例如
Size s = Enum.valueOf(Size.class,"SMALL");
将s设置成Size.SMALL。
每个枚举类型都有一个静态的values方法,他将返回一个包含全部枚举值的数组。比如:
Size[] values = Size.values();
返回包含元素Size.SMALL,Size.MEDIUM,Size.LARGE和Size.EXTRA_LARGE的数组。
ordinal方法返回enum声明中枚举常量的位置,位置从0开始计算。例如 Size.MEDIUM.ordinal()返回1。