一、语法
enum Size {
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
private Size(String abbreviation) { this.abbreviation = abbreviation; }
public String getAbbreviation() { return abbreviation; }
private String abbreviation;
}
- 枚举类型是那些字段由一组固定常量组成的类型。常见的例子有:东南西北四个方向,星期几等。
- 所有枚举类型都隐式继承java.lang.Enum类型,因为java不支持多重继承,所以枚举不能继承其他任何类。
- java对枚举的支持是语言级的支持,switch-case结构无需加枚举名作为前缀。
- 多个枚举常量之间以逗号隔开,枚举常量列表最后可以以分号结束,如果有成员方法或成员变量,必须以分号结束。
- 枚举类型可以有成员方法和成员变量。如果有成员方法和成员变量,枚举常量列表要放在枚举体最开始,以分号结尾。
- 枚举类型的构造器必须是包级私有或者私有,构造器会自动创建枚举类型体开端定义的枚举常量。
二、枚举类中常见方法
- toString()方法,默认显示枚举类元素名。
- Enum.valueOf(Class< T > enumType, String name)方法,通过传入的name字符串解析出一个该枚举类的实例,其中传入的字符串必须是元素列表的名称之一,否则将抛出 java.lang.IllegalArgumentException异常。
- Size.values()方法,返回一个该枚举类的数组,其中数组的元素即为该枚举类中元素列表中的元素。
- ordinal()方法,返回枚举元素实例中元素列表中的位置,起始位置为0,该方法为final不可覆盖的。
- compareTo()方法,默认比较两个元素的位置关系。
- name()方法,返回元素实列的变量名,该方法为final不可覆盖的,等价于toString()方法。
public class EnumTest {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in)
System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ")
String input = in.next().toUpperCase()
Size size = Enum.valueOf(Size.class, input)
Size small = Size.valueOf("SMALL")
System.out.println("size=" + size)
System.out.println("size=" + size.toString())
System.out.println("size=" + size.name())
System.out.println(Arrays.toString(Size.values()))
System.out.println("abbreviation=" + size.getAbbreviation())
if (size == Size.EXTRA_LARGE)
System.out.println("Good job–you paid attention to the _.")
}
}
三、作为switch语句中分支结构的条件使用
switch (size) {
case SMALL:
System.out.println("S");
break;
case MEDIUM:
System.out.println("M");
break;
case LARGE:
System.out.println("L");
break;
case EXTRA_LARGE:
System.out.println("XL");
break;
default:
System.out.println(size.name());
}