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

深入探討 Java 列舉類型

     編輯:Java 相關知識

前言

Java 5 引入 enum 關鍵字,提供型別安全的列舉實作。列舉不僅是常數集合,更是功能完整的類別,支援欄位、方法、介面實作與單例模式。本文從原理、反編譯、常見用法三個面向深入解析。

一、列舉本質:語法糖

定義列舉:

public enum Season { SPRING, SUMMER, AUTUMN, WINTER }

反編譯後可見:

  • Season 為 final 類別,繼承 java.lang.Enum。
  • 每個列舉常數(SPRING 等)皆為 Season 的 static final 實例,在靜態初始化區塊 <clinit> 中建立。
  • 提供 values() 回傳所有常數陣列,valueOf(String) 依名稱取得常數。

二、核心特性

  1. 型別安全:變數只能賦予列舉中定義的常數。
  2. 單例實作:因類別載入機制保證唯一實例,Josh Bloch 推薦用 enum Singleton { INSTANCE } 實作單例。
  3. 可用於 switch:編譯器支援直接判斷列舉常數。
  4. 可擴充欄位與方法:每個常數可擁有專屬行為。
  5. 可實作介面:列舉類別可實作一或多個介面,實現策略模式等。

三、進階用法範例

1. 自訂欄位與抽象方法

public enum Operation {
    PLUS("+") { public int apply(int a, int b) { return a + b; } },
    MINUS("-") { public int apply(int a, int b) { return a - b; } };
    private final String symbol;
    Operation(String symbol) { this.symbol = symbol; }
    public abstract int apply(int a, int b);
}

2. 實作介面搭配 Map 快速查找

interface Op { int execute(int a, int b); }
enum OpEnum implements Op {
    ADD("+") { public int execute(int a, int b) { return a + b; } },
    SUB("-") { public int execute(int a, int b) { return a - b; } };
    private final String key;
    OpEnum(String key) { this.key = key; }
}
// 使用
Map map = new HashMap<>();
for (OpEnum e : OpEnum.values()) map.put(e.key, e);
int result = map.get("+").execute(1, 2); // 3

四、總結

Java 列舉是功能強大的型別,遠不止常數集合。善用其單例特性、多態行為與介面實作,能寫出更安全、可維護的程式碼。建議在「固定集合、需行為封裝、單例需求」等場景優先考慮列舉。

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