首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JDK 5.0 新特性:Enum 枚舉類型完整用法與進階範例解析

     編輯:Java 相關知識

背景

JDK 5.0 引入泛型、增強型 for 迴圈、自動裝箱/拆箱、靜態導入等特性,其中 Enum 枚舉類型 解決了舊版本需自行實作類型安全枚舉或引入第三方庫的痛點。本文由淺入深示範 Enum 用法。

基礎:無數值枚舉

private enum MyColor { Red, Yellow, Blue }

進階:帶屬性、建構子、方法的枚舉

class EnumTest {
    private enum MyColor {
        Red(1), Yellow(2), Blue(3);

        private final int num;           // 序號屬性,final 保證不可變
        MyColor(int num) { this.num = num; } // 建構子,自動對應各成員
        public int getNum() { return num; }
    }

    public void showColor() {
        // 增強型 for 迴圈遍歷所有枚舉值
        for (MyColor c : MyColor.values()) {
            System.out.println(c + " = " + c.getNum());
        }
        MyColor scolor = MyColor.Blue;
        System.out.println(scolor);
        if (scolor.getNum() == 3) System.out.println("true");
    }

    public static void main(String[] args) {
        new EnumTest().showColor();
    }
}

編譯與執行

javac -source 1.5 EnumTest.java   // 指定 1.5 語法版本
java EnumTest

輸出結果

Red = 1
Yellow = 2
Blue = 3
Blue
true

進階:多屬性、行為豐富的枚舉(官方 Planet 範例)

public enum Planet {
    MERCURY (3.303e+23, 2.4397e6),
    VENUS   (4.869e+24, 6.0518e6),
    EARTH   (5.976e+24, 6.37814e6),
    MARS    (6.421e+23, 3.3972e6),
    JUPITER (1.9e+27,   7.1492e7),
    SATURN  (5.688e+26, 6.0268e7),
    URANUS  (8.686e+25, 2.5559e7),
    NEPTUNE (1.024e+26, 2.4746e7),
    PLUTO   (1.27e+22,  1.137e6);

    private final double mass;   // kg
    private final double radius; // m
    Planet(double mass, double radius) { this.mass = mass; this.radius = radius; }
    public double mass() { return mass; }
    public double radius() { return radius; }

    public static final double G = 6.67300E-11; // 萬有引力常數

    public double surfaceGravity() {
        return G * mass / (radius * radius);
    }
    public double surfaceWeight(double otherMass) {
        return otherMass * surfaceGravity();
    }
}

枚舉本質是 final 類別,可擁有欄位、建構子、方法、實作介面,極大提升類型安全與表達力。

編譯器提示

若編譯器預設版本為 1.4,需加 -source 1.5 參數啟用新特性。

參考文件

JDK 文件:$JDK_HOME/docs/guide/language/enums.html

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved