枚举类

一、语法

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结构无需加枚举名作为前缀。
  • 多个枚举常量之间以逗号隔开,枚举常量列表最后可以以分号结束,如果有成员方法或成员变量,必须以分号结束。
  • 枚举类型可以有成员方法和成员变量。如果有成员方法和成员变量,枚举常量列表要放在枚举体最开始,以分号结尾。
  • 枚举类型的构造器必须是包级私有或者私有,构造器会自动创建枚举类型体开端定义的枚举常量。

二、枚举类中常见方法

  1. toString()方法,默认显示枚举类元素名。
  2. Enum.valueOf(Class< T > enumType, String name)方法,通过传入的name字符串解析出一个该枚举类的实例,其中传入的字符串必须是元素列表的名称之一,否则将抛出 java.lang.IllegalArgumentException异常。
  3. Size.values()方法,返回一个该枚举类的数组,其中数组的元素即为该枚举类中元素列表中的元素。
  4. ordinal()方法,返回枚举元素实例中元素列表中的位置,起始位置为0,该方法为final不可覆盖的
  5. compareTo()方法,默认比较两个元素的位置关系。
  6. 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());
}
发布了159 篇原创文章 · 获赞 10 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章