枚舉Enum
讓某個類型變量的取值只能爲若干固定值中的一個否則編譯器就會報錯, 往往存在着這樣的“數據集”,它們的數值在程序中是穩定的,而且“數據集”中的元素是有限的
Enum相關語法
2)舉類的構造函數只能使用private訪問修飾符,如果省略了其構造器的訪問控制符,則默認使用private修飾;
3)舉類的所有實例必須在枚舉類中顯式列出,否則這個枚舉類將永遠都不能產生實例。列出這些實例時,系統會自動添加public static final修飾,無需程序員顯式添加。
4)switch使用enum
Enum主要方法
2)實現了Comparable接口,具有compareTo()
3)name()返回Enum實例聲明時的名稱
4)values()返回實例數組,EnumA.class.getEnumConstants()也可以
5)getDeclaringClass(),Eunm實例調用該方法可知所屬Enum類名
Enum用法
添加新方法
<span style="font-weight: normal;">public enum EnumDemo {
RAD("rgb 255",255),YELLOW("rgb 123",123);
private String desc ;
private int age;
private EnumDemo(String desc,int age){
this.desc = desc;
this.age=age;
}
public String getDesc(){
return desc;
}
public int getAge(){
return age;
}
}</span>
<span style="font-weight: normal;">public class Test {
public static void main(String[] args) {
System.out.println(EnumDemo.RAD);
System.out.println("順序" + EnumDemo.RAD.ordinal());
System.out.println("屬性" + EnumDemo.RAD.getAge());
System.out.println("屬性" + EnumDemo.RAD.getDesc());
System.out.println("實例名稱" + EnumDemo.RAD.name());
System.out.println("實例個數" + EnumDemo.values().length);
// RAD
// 順序0
// 屬性255
// 屬性rgb 255
// 實例名稱RAD
// 實例個數2
}
}</span>
常量方法
public enum EnumDemo {
//實例必須在最前面
RED("rgb 255", 255) {
public String getInfo() {
//實現接口
return "test RED";
}
},
YELLOW("rgb 123", 123) {
public String getInfo() {
return "test YELLOW";
}
};
private String desc;
private int age;
private EnumDemo(String desc, int age) {
this.desc = desc;
this.age = age;
}
public String getDesc() {
return desc;
}
public int getAge() {
return age;
}
//實例必須實現
<strong>abstract String getInfo();</strong>
}
public class Test {
public static void main(String[] args) {
System.out.println(EnumDemo.RED);
System.out.println(EnumDemo.RED.getInfo());
System.out.println(EnumDemo.RED.getDeclaringClass());
// RED
// test RED
// class metnoh.EnumDemo
}
}
枚舉與接口
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour {
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變量
private String name;
private int index;
// 構造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 接口方法
@Override
public String getInfo() {
return this.name;
}
// 接口方法
@Override
public void print() {
System.out.println(this.index + ":" + this.name);
}
}
enum Coffee implements EnumInf {
BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO;
@Override
public void eat() {
System.out.println("coffee");
}
}
enum Dessert implements EnumInf {
FRUIT, CAKE, GELATO;
@Override
public void eat() {
System.out.println("Dessert");
}
}
abstract void eat();
}