java - enum是什么? 為什么有它? 怎么用?
問題描述
實際現(xiàn)象enum的基本會用, 但想追本溯源( 探討下本質 )
預期現(xiàn)象拒絕教條式的摘抄文檔式的回答(時間重要)
求對enum深刻的認識(至少在實際生產(chǎn)環(huán)境中寫過很多代碼) !
注: 我不是編程初學者, 一些初級概念無需科普
上下文環(huán)境討論的對象, 為Java中的enum( 其實enum是一種概念 )
具體地, 是討論enum 這個關鍵字
問題解答
回答1:可以用來代替定義類型常量 ,比如 訂單狀態(tài),證件類型等,保證類型安全 比如用普通的String類表示訂單狀態(tài),調用方可以傳一個不在訂單狀態(tài)范圍內的String給被調用方,這種錯誤在編譯階段不能發(fā)現(xiàn)
java枚舉類本質是一個多例模式實現(xiàn),單例模式是多例模式的一個特例
枚舉類不能繼承,比如enumA extends enumB不行
一個枚舉類 內部類型有順序(order) 實現(xiàn)了 Comparable接口
回答2:Effective Java 第6章有詳細的解釋,可以去看看
回答3:可以簡單把enum看成一個有備注信息的int類型。
回答4:被你的條件嚇到了,我就說一點我個人的想法
enum可以看做一種特殊的class,包含一些訪問性公開的常量,其實作為訪問性公開的常量來說,在類加載過程中已經(jīng)被解析到常量池,enum只是從語義的角度使用戶可以更方便地在使用常量時展示常量的含義。同時也方便了常量的構造,循環(huán)遍歷某一類型的所有常量,在switch語句中使用等等。
回答5:這個題目太泛,不太好回答。enum本質上是一個繼承了java.lang.Enum的class,可以用在單例和需要限定輸入的地方
回答6:先說說自己個人的膚淺的主觀的理解, 拋磚引玉.
我覺得 enum 出現(xiàn)的目的是:
提供一種管理常量的手段,
一種命名空間.
回答7:enum的存在本身就是為了解決常量的可讀性的問題,在沒有enum之前,標記一種狀態(tài),常使用int類型,其1,2之類的可讀性不是很好,而且新增一個常量要寫一個長長語句,為了解決這一系列問題在jdk5就加上了這個功能。其本質就是一個類,只不過在創(chuàng)建enum的時候,會自動生成values()、ordinal()等方法,并且支持了switch語句,覆蓋了常量會出現(xiàn)的場景,比直接定義常量要方便使用。
相關文章:
1. javascript - 關于定時器 與 防止連續(xù)點擊 問題2. javascript - 在IE中(9+)平時的樣式不生效,只有用開發(fā)者工具選中這個元素才生效,是什么原因?3. objective-c - ios百度地圖定位問題4. html - vue里面:src在IE(9-11)下不顯示圖片5. javascript - 關于這組數(shù)據(jù)如何實現(xiàn) 按字母列表分類展示 不改動數(shù)據(jù)結構6. javascript - 求助這種功能有什么好點的插件?7. javascript - ie11以下單擊打開不了file,雙擊可以。求解?8. html5 - rudy編譯sass的時候有中文報錯9. javascript - 寫移動端的頁面的時候,有不一快空白,是怎么回事?10. 微信開放平臺 - Android調用微信分享不顯示
