枚舉類

一、語法

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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章