高階Java列舉型別enum使用詳解
java的Enum列舉型別終於在j2se1.5出現了。之前覺得它只不過是雞肋而已,可有可無。畢竟這麼多年來,沒有它,大家不都過得很好嗎?今 日看《Thinking in Java》4th edition,裡面有一句話“有時恰恰因為它,你才能夠"優雅而乾淨"地解決問題。優雅與清晰很重要,正式它們區別了成功的解決方案與失敗的解決方案。 而失敗的解決方案就是因為其他人無法理他。"使用Enum列舉型別,可以將以前笨拙的程式碼變得優雅簡單?但是,我同時也在思考另外一個問題,使用新的技 術,會不會給技術人員帶來更多的負擔呢?
"學習新版語言的一個危險就是瘋狂使用新的語法結構"
先學習一下enum的簡單應用,以下簡潔的程式碼已經包括enum所提供的絕大部分功能。
1.enum的應用,包括定義,遍歷,switch,enumset,enummap等
Java程式碼
package com.janeky.enumtest;
import java.util.EnumMap;
import java.util.EnumSet;
/**
* Java列舉型別enum使用詳解
* @version 2009/9/5
* @author janeky
* @mail [email protected]
*
*/
public class EnumTest {
//定義一個enum列舉型別,包括兩個例項ON,OFF
public enum State {
ON, OFF
};
//測試函式
public static void main(String[] args) {
//直接變數enum
for (State s : State.values())
System.out.println(s.name());
//switch與enum的結合使用
State switchState = State.OFF;
switch (switchState) {
case OFF:
System.out.println("OFF");
break;
case ON:
System.out.println("ON");
break;
}
//EnumSet的使用
EnumSet stateSet = EnumSet.allOf(State.class);
for (State s : stateSet) {
System.out.println(s);
}
//EnumMap的使用
EnumMap stateMap = new EnumMap(
State.class);
stateMap.put(State.ON, "is On");
stateMap.put(State.OFF, "is off");
for (State s : State.values()) {
System.out.println(s.name() + ":" + stateMap.get(s));
}
}
}
package com.janeky.enumtest;
import java.util.EnumMap;
import java.util.EnumSet;
/**
* Java列舉型別enum使用詳解
* @version 2009/9/5
* @author janeky
* @mail [email protected]
*
*/
public class EnumTest {
//定義一個enum列舉型別,包括兩個例項ON,OFF
public enum State {
ON, OFF
};
//測試函式
public static void main(String[] args) {
//直接變數enum
for (State s : State.values())
System.out.println(s.name());
//switch與enum的結合使用
State switchState = State.OFF;
switch (switchState) {
case OFF:
System.out.println("OFF");
break;
case ON:
System.out.println("ON");
break;
}
//EnumSet的使用
EnumSet stateSet = EnumSet.allOf(State.class);
for (State s : stateSet) {
System.out.println(s);
}
//EnumMap的使用
EnumMap stateMap = new EnumMap(
State.class);
stateMap.put(State.ON, "is On");
stateMap.put(State.OFF, "is off");
for (State s : State.values()) {
System.out.println(s.name() + ":" + stateMap.get(s));
}
}
}
為每個enum例項定義不同的方法
Java程式碼
package com.janeky.enumtest;
public enum TestEnumMathod {
//為每個enum例項新增不同的實現方法
SAMPLE1 {
String getInfo() {
return "SAMPLE1";
}
},
SAMPLE2{
String getInfo()
{
return "SAMPLE2";
}
};
abstract String getInfo();
//測試
public static void main(String args[])
{
for(TestEnumMathod method:values())
{
System.out.println(method.getInfo());
}
}
}
package com.janeky.enumtest;
public enum TestEnumMathod {
//為每個enum例項新增不同的實現方法
SAMPLE1 {
String getInfo() {
return "SAMPLE1";
}
},
SAMPLE2{
String getInfo()
{
return "SAMPLE2";
}
};
abstract String getInfo();
//測試
public static void main(String args[])
{
for(TestEnumMathod method:values())
{
System.out.println(method.getInfo());
}
}
}
以下內容可能有些無聊,但絕對值得一窺
1.
public class State {
public static final int ON = 1;
public static final Int OFF= 0;
}
有什麼不好了,大家都這樣用了很長時間了,沒什麼問題啊。
首先,它不是型別安全的。你必須確保是int
其次,你還要確保它的範圍是0和1
最後,很多時候你打印出來的時候,你只看到 1 和0 ,
但其沒有看到程式碼的人並不知道你的企圖
so,拋棄你所有舊的public static final常量吧
2.可以建立一個enum類,把它看做一個普通的類。除了它不能繼承其他類了。(java是單繼承,它已經繼承了Enum),
可以新增其他方法,覆蓋它本身的方法
3.switch()引數可以使用enum了
4.values()方法是編譯器插入到enum定義中的static方法,所以,當你將enum例項向上轉型為父類Enum是,values() 就不可訪問了。解決辦法:在Class中有一個getEnumConstants()方法,所以即便Enum介面中沒有values()方法,我們仍然可 以通過Class物件取得所有的enum例項
5.無法從enum繼承子類,如果需要擴充套件enum中的元素,在一個介面的內部,建立實現該介面的列舉,以此將元素進行分組。達到將列舉元素進行分組。
6.使用EnumSet代替標誌。enum要求其成員都是唯一的,但是enum中不能刪除新增元素。
7.EnumMap的key是enum,value是任何其他Object物件。
8.enum允許程式設計師為eunm例項編寫方法。所以可以為每個enum例項賦予各自不同的行為。
9.使用enum的職責鏈(Chain of Responsibility) .這個關係到設計模式的職責鏈模式。以多種不同的方法來解決一個問題。然後將他們連結在一起。當一個請求到來時,遍歷這個鏈,直到鏈中的某個解決方案能夠處理該請求。
10.使用enum的狀態機
11.使用enum多路分發
相關推薦
高階Java列舉型別enum使用詳解
java的Enum列舉型別終於在j2se1.5出現了。之前覺得它只不過是雞肋而已,可有可無。畢竟這麼多年來,沒有它,大家不都過得很好嗎?今 日看《Thinking in Java》4th edition,裡面有一句話“有時恰恰因為它,你才能夠"優雅而乾淨"地解決問題。優雅
【小家Java】深入理解Java列舉型別(enum)及7種常見的用法(含EnumMap和EnumSet)
相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9
Java變數型別使用詳解
在Java語言中,所有的變數在使用前必須宣告。宣告變數的基本格式如下:type identifier [ = value][, identifier [= value] …] ; 格式說明: type為Java資料型別。 identifier是變數名。可以使用逗號隔開來宣告多個同類型變數。
java列舉型別(enum)
列舉實現原理 package com.own.learn.jdk.enum1; public enum Day { MONDAY("monday"), TUESDAY("TUESDAY"), WEDNESDAY("WEDNESDAY"),
Java列舉型別(enum)-5
EnumMap EnumMap基本用法 先思考這樣一個問題,現在我們有一堆size大小相同而顏色不同的資料,需要統計出每種顏色的數量是多少以便將資料錄入倉庫,定義如下列舉用於表示顏色Color: enum Color { GREEN,RED,BLUE,YELLO
Java列舉型別(enum)-7
EnumSet原理 有前面位向量的分析,對於瞭解EnumSet的實現原理就相對簡單些了,EnumSet內部使用的位向量實現的,前面我們說過EnumSet是一個抽象類,事實上它存在兩個子類,RegularEnumSet和JumboEnumSet。RegularEnumSet使
java列舉型別enum
只能夠取特定值的一個,使用enum關鍵字, 在編譯期間就確定某一些值必須取特定的一些值的之一 public class Enum { public enum Day {yesterday,today,tomorrow};//定義新型別,只能取大括號內三者之一 publ
深入理解Java列舉型別(enum)
關聯文章: 本篇主要是深入對Java中列舉型別進行分析,主要內容如下: 理解列舉型別 列舉型別是Java 5中新增特性的一部分,它是一種特殊的資料型別,之所以特殊是因為它既是一種類(class)型別卻又比類型別多了些特殊的
java列舉型別enum的使用
java 列舉型別enum 的使用 最近跟同事討論問題的時候,突然同事提到我們為什麼java 中定義的常量值不採用enmu 列舉型別,而採用public final static 型別來定義呢?
java列舉型別enum值與整數的轉換
java程式設計中偶爾會用到列舉,為了直觀,我們通常將列舉值設定為形象的單詞,方便理解和使用。列舉型別相當於資料庫中字典表,但是列舉只有字典表的值,缺少其他用來表示和值一一對應的欄位,當我們在資料庫中儲存一個對應列舉型別的列,我們希望儲存的是類似0,1,2,3,4這樣的數字,
java列舉型別enum和註解
做java專案時候發現常量好像怎麼不是固值,問度娘才知道,計算機語言中有個資料型別叫列舉enum,用來限制資料範圍比如1年=365天=365*24h=.........所以還是固值,表示式方式變了而已,如下常量毫秒轉換其他單位方法:然後就是註解(之前用的都是xml配置bean
Java 列舉(enum) 詳解7種常見的用法
JDK1.5引入了新的型別——列舉。在 Java 中它雖然算個“小”功能,卻給我的開發帶來了“大”方便。 大師兄我又加上自己的理解,來幫助各位理解一下。 用法一:常量 在JDK1.5 之前,我們定義常量都是: public static final.... 。現在好
Java列舉型別詳解(原理+用法)
可以這麼說,Java的列舉型別本來是不存在的,但Java發了個"語法糖",就有了列舉型別。Java從JDK1.5開始支援列舉,通常一個特性如果在一開始沒有提供,在語言發展後期才新增,會遇到一個問題,就是向後相容性的問題。像Java在1.5中引入的很多特性,為了向後相容,編譯
java列舉(enum)詳解
一.為什麼要使用列舉. 需求:定義一個Employee(員工),使用一個變數restday來表示他哪一天休息.如圖:
Java 列舉(enum) 詳解7種常見的用法(轉)
原文:https://blog.csdn.net/qq_27093465/article/details/52180865JDK1.5引入了新的型別——列舉。在 Java 中它雖然算個“小”功能,卻給我的開發帶來了“大”方便。大師兄我又加上自己的理解,來幫助各位理解一下。用法
Java 列舉 enum 詳解
> 本文部分摘自 On Java 8 ## 列舉型別 Java5 中添加了一個 enum 關鍵字,通過 enum 關鍵字,我們可以將一組擁有具名的值的有限集合建立為一種新的型別,這些具名的值可以作為常規的程式元件使用,例如: ```java public enum Spiciness {
C++中列舉enum詳解
轉載部落格地址:https://blog.csdn.net/bruce_0712/article/details/54984371 眾所周知,C/C++語言可以使用#define和const建立符號常量,而使用enum工具不僅能夠建立符號常量,還能定義新
Java中列舉型別 Enum
列舉例子如下: public enum Status { SCUUESS("1", "成功"), FAILED("2", "失敗"); private String value;
java中列舉型別Enum的用法
以前對Enum只有一個模糊的概念,最近專案中要用,所以就專門研究了一下: java的Enum列舉型別終於在j2se1.5出現了。之前覺得它只不過是雞肋而已,可有可無。畢竟這麼多年來,沒有它,大家不都過得很好嗎?今日看《Thinking in Java》4th edition
java jdk1.5 特性 -- 列舉型別 Enum的使用與分析
public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 顯然,enum很像特殊的class,實際上enum宣告定義的型別就是一個類。 而這些類都是類庫中Enum類的子類(java.lang.Enum<E>)。它們繼承了這個Enu