搜尋

首頁  >  問答  >  主體

java - enum是什麼? 為什麼有它? 怎麼用?

實際現象

預期現象

  1. 拒絕教條式的摘抄文檔式的回答(時間重要)

  2. 求對enum深刻的認識(至少在實際生產環境中寫過很多程式碼) !

#註: 我不是程式設計初學者, 一些初級概念不需要科普

上下文環境

我想大声告诉你我想大声告诉你2787 天前719

全部回覆(7)我來回復

  • 高洛峰

    高洛峰2017-05-17 10:03:51

    1. 可以用來代替定義類型常數,例如訂單狀態,證件類型等,保證類型安全
      比如用普通的String類表示訂單狀態,調用方可以傳一個不在訂單狀態範圍內的String給被調用方,這種錯誤在編譯階段不能發現

    2. java枚舉類別本質是一個多例模式實現,單例模式是多例模式的一個特例

    3. 枚舉類別不能繼承,例如enumA extends enumB不行

    4. 一個枚舉類別 內部類型有順序(order) 實作了 Comparable介面

    回覆
    0
  • ringa_lee

    ringa_lee2017-05-17 10:03:51

    Effective Java 第6章有詳細的解釋,可以去看看

    回覆
    0
  • 高洛峰

    高洛峰2017-05-17 10:03:51

    可以簡單把enum看成一個有備註資訊的int型別。

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-17 10:03:51

    被你的條件嚇到了,我就說一點我個人的想法

    enum可以看做一種特殊的class,包含一些訪問性公開的常數,其實作為訪問性公開的常數來說,在類別加載過程中已經被解析到常量池,enum只是從語義的角度使用戶可以更方便在使用常數時展示常數的意義。同時也方便了常數的構造,循環遍歷某一類型的所有常數,在switch語句中使用等等。

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-17 10:03:51

    這個題目太泛,不太好回答。
    enum本質上是一個繼承了java.lang.Enum的class,可以用在單例和需要限定輸入的地方

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-17 10:03:51

    先說說自己個人的膚淺的主觀的理解, 拋磚引玉.

    我覺得 enum 出現的目的是:

    • 提供一種管理常數的手段,

    • 一種命名空間.

    回覆
    0
  • ringa_lee

    ringa_lee2017-05-17 10:03:51

    enum的存在本身就是為了解決常數的可讀性的問題,在沒有enum之前,標記一種狀態,常使用int類型,其1,2之類的可讀性不是很好,而且新增一個常數要寫一個長語句,為了解決這一系列問題在jdk5就加上了這個功能。其本質就是一個類,只不過在創建enum的時候,會自動生成values()、ordinal()等方法,並且支持了switch語句,覆蓋了常數會出現的場景,比直接定義常數要方便使用。

    回覆
    0
  • 取消回覆