Java SE 列舉型別詳解
阿新 • • 發佈:2022-03-19
列舉的使用
一、列舉的歷史
列舉是jdk1.5版本推出的,主要作用是確定某一個範圍裡的值
早先時候,程式設計師使用列舉需要通過定義類的方式來使用
public class Color{ private String name; public static final Color RED = new Color("紅色"); public static final Color GREEN = new Color("綠色"); public static final Color BLUE = new Color("藍色"); public String getName(){ return name; } public String setName(String name){ this.name = name; } //私有建構函式 private Color(String name){ this.setName(name); } public static Color getInstance(int i){ if(i == 0) return RED; if(i == 1) return GREEN; if(i == 2) return BLUE; return null; } }
呼叫時則應該先獲取例項,再呼叫例項的getName方法
可以看到這種方法非常不方便
二、正式使用列舉
列舉的定義方法
public enum Color{RED,BLUE,PURPLE;}
列舉的使用方法
//列舉的簡單使用
public class Main {
public static void main(String[] args) {
Color c = Color.RED;
System.out.println(c);
}
}//output:RED
列舉類和列舉關鍵字
列舉類指Enum,是規定列舉型別的母類。而列舉關鍵字則是定義了一個列舉,使用列舉關鍵字建立列舉時自動繼承Enum。
設定列舉物件會呼叫列舉類的受保護的構造方法
列舉類包含更多常用的方法,方便程式碼編寫
列舉類集的使用
EnumMap繼承了Map介面,使用起來與Map沒有區別,唯一的區別是建構函式中需要傳入一個Enum類
public class Main { public static void main(String[] args) { EnumMap<Color, String> eMap = new EnumMap<Color, String>(Color.class); eMap.put(Color.RED, "red"); eMap.put(Color.PURPLE, "purple"); eMap.put(Color.BLUE, "blue"); for (Map.Entry<Color, String> me : eMap.entrySet()) System.out.println(me.getKey() + "--->" + me.getValue()); } } //output:RED--->red BLUE--->blue PURPLE--->purple
EnumSet是一個抽象類,是Set介面的子類,沒有明顯的構造方法,此類的方法都是靜態操作
allOf方法將列舉所有的內容設定到集合
noneOf方法返回一個空集合
public static void main(String[] args) {
EnumSet<Color> eSet = EnumSet.allOf(Color.class);
Iterator<Color> iterator = eSet.iterator();
while (iterator.hasNext())
System.out.println(iterator.next());
}
列舉的建構函式方法
列舉可以直接定義構造方法,但需要注意的是,一旦定義,所有的列舉物件都必須明確的呼叫此方法。
列舉的構造方法不能是public,因為不允許外部呼叫。每一個列舉物件都有自己的name屬性。
public enum Color {
//這裡明確地呼叫了構造方法
RED("紅色"),BLUE("藍色"),PURPLE("紫色");
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Color (String name){
this.setName(name);
}
}
列舉介面
列舉介面可以定義一個抽象方法,列舉類可以實現該介面,如果沒有定義列舉構造方法。則列舉類的每一個物件都需要實現列舉介面中定義的方法
public interface Info {
String getColor();
}
public enum Color implements Info {
RED{
@Override
public String getColor() {
return "紅色";
}
},
GREEN {
@Override
public String getColor() {
return "綠色";
}
},
PURPLE {
@Override
public String getColor() {
return "紫色";
}
}
}
在列舉中定義抽象方法
和介面類似,可以在列舉中定義多個抽象方法。如果列舉中沒有構造方法,則列舉中每個物件都需要實現該抽象方法.
public enum Color{
RED{
@Override
public String getColor() {
return "紅色";
}
},
GREEN {
@Override
public String getColor() {
return "綠色";
}
},
PURPLE {
@Override
public String getColor() {
return "紫色";
}
}
public abstract String getColor();
}