下面給出在枚舉中聲明屬性和方法的示例:
package com.fhp.enumexample;
public enum TypeEnum {
VIDEO(1), AUDIO(2), TEXT(3), IMAGE(4);
int value;
TypeEnum(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
在這個枚舉中,每個枚舉的值都有一個對應的int型字段,而且不同的枚舉值也會有不同的int數值。同時,它和普通的類一樣,可以聲明構造器和各種各樣的方法。如:
TypeEnum type = TypeEnum.TEXT;//type的value屬性值為3。
System.out.println(type.getValue());//屏幕輸出3。
如果要為每個枚舉值指定屬性,則在枚舉中必須聲明一個參數為屬性對應類型的構造方法(不能是public)。否則編譯器將給出The constructor TypeEnum(int, String) is undefined的錯誤。在此例中,屬性為int型,因此構造方法應當為int型。除此之外,還可以為枚舉指定多個屬性,如:
package com.fhp.enumexample;
public enum TypeEnum {
VIDEO(1, "視頻"), AUDIO(2, "音頻"), TEXT(3, "文本"), IMAGE(4, "圖像");
int value;
String name;
TypeEnum(int value, String name) {
this.value = value;
this.name = name;
}
public int getValue() {
return value;
}
public String getName() {
return name;
}
}
enum還內置了許多方法,常用的如下:
int compareTo(E o)
比較此枚舉與指定對象的順序。
Class<E> getDeclaringClass()
返回與此枚舉常量的枚舉類型相對應的 Class 對象。
String name()
返回此枚舉常量的名稱,在其枚舉聲明中對其進行聲明。
int ordinal()
返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數為零)。
String toString()
返回枚舉常量的名稱,它包含在聲明中。
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
返回帶指定名稱的指定枚舉類型的枚舉常量。
static T[] values()
返回該枚舉的所有值。
現在,假設要為該枚舉實現一個根據整數值生成枚舉值的方法,可以這樣做:
package com.fhp.enumexample;
public enum TypeEnum {
VIDEO(1, "視頻"), AUDIO(2, "音頻"), TEXT(3, "文本"), IMAGE(4, "圖像");
int value;
String name;
TypeEnum(int value, String name) {
this.value = value;
this.name = name;
}
public int getValue() {
return value;
}
public String getName() {
return name;
}
public static TypeEnum getByValue(int value) {
for(TypeEnum typeEnum : TypeEnum.values()) {
if(typeEnum.value == value) {
return typeEnum;
}
}
throw new IllegalArgumentException("No element matches " + value);
}
}
getByValue(int)即為整數值轉枚舉值的方法。調用values()方法獲取到該枚舉下的所有值,然后遍歷該枚舉下面的每個值和給定的整數是否匹配,若匹配直接返回,若無匹配值則拋出IllegalArgumentException異常,表示參數不合法,兼有有效性驗證的作用。
綜上,我們可以看到,在JDK5中新引入的枚舉完美地解決了之前通過常量來表示離散量所帶來的問題,大大加強了程序的可讀性、易用性和可維護性,並且在此基礎之上又進行了擴展,使之可以像類一樣去使用,更是為Java對離散量的表示上升了一個台階。因此,如果在Java中需要表示諸如顏色、方式、類別、狀態等等數目有限、形式離散、表達又極為明確的量,應當盡量舍棄常量表示的做法,而將枚舉作為首要的選擇。
————————————————
版權聲明:本文為CSDN博主「Jicky-17」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u014527058/article/details/52751488
