|
枚舉類(lèi)型可以取代以往常量的定義方式,即將常量封裝在類(lèi)或接口中。此外,枚舉類(lèi)型還提供了安全檢查功能。枚舉類(lèi)型本質(zhì)上還是以類(lèi)的形式存在。
1、使用枚舉類(lèi)型設(shè)置常量
以往設(shè)置常量,通常將常量放置在接口中,這樣在程序中就可以直接使用了,并且該常量不能被修改,因?yàn)樵诮涌谥卸x的常量時(shí),該常量的修飾符為final與static。
public interface Constants public static final int RED = 1; public static final int BLUE = 2; public static final int GREEN = 3;
使用枚舉定義常量的語(yǔ)法如下:
命名規(guī)范:
final常量:使用大寫(xiě)字母命名,并且中間使用下劃線進(jìn)行連接。
enum枚舉:使用大寫(xiě)字母命名,并且中間使用下劃線進(jìn)行連接。
示例:枚舉類(lèi)型的使用。
public static void doit(ColorEnum c) System.out.println("This is RED"); System.out.println("This is BLUE"); System.out.println("This is GREEN"); public static void main(String[] args)
2、深入了解枚舉類(lèi)型
枚舉類(lèi)型較傳統(tǒng)定義常量的方式,除了具有參數(shù)類(lèi)型檢測(cè)的優(yōu)勢(shì)之外,還具有其他方面的優(yōu)勢(shì)。
2.1 操作枚舉類(lèi)型成員的方法
用戶可以將一個(gè)枚舉類(lèi)型看作是一個(gè)類(lèi),它繼承于java.lang.Enum類(lèi),當(dāng)定義一個(gè)枚舉類(lèi)型時(shí),每一個(gè)枚舉類(lèi)型成員都可以看作是枚舉類(lèi)型的一個(gè)實(shí)例,這些枚舉類(lèi)型成員默認(rèn)都被final、public、static所修飾,所以當(dāng)使用枚舉類(lèi)型成員時(shí)直接使用枚舉類(lèi)型名稱(chēng)調(diào)用枚舉類(lèi)型成員即可。
由于枚舉類(lèi)型對(duì)象繼承與java.lang.Enum類(lèi),所以該類(lèi)中一些操作枚舉類(lèi)型的方法都可以應(yīng)用到枚舉型中。
枚舉類(lèi)型的常用方法:
| 方法名稱(chēng) |
具體含義 |
使用方法 |
|---|
| values() |
該方法可以將枚舉類(lèi)型成員以數(shù)組的形式返回 |
枚舉類(lèi)型名稱(chēng).values() |
| valueOf() |
該方法可以實(shí)現(xiàn)將普通字符串轉(zhuǎn)換為枚舉實(shí)例 |
枚舉類(lèi)型名稱(chēng).valueOf("ABC") |
| compareTo() |
該方法用于比較兩個(gè)枚舉對(duì)象在定義時(shí)的順序 |
枚舉對(duì)象.compareTo() |
| ordinal() |
該方法用于得到枚舉成員的位置索引 |
枚舉對(duì)象.ordinal() |
(1)values()方法
該方法可以將枚舉類(lèi)型成員以數(shù)組的形式返回,也可以通過(guò)該方法獲取枚舉類(lèi)型的成員。
示例:使用枚舉類(lèi)型中的values()方法獲取枚舉類(lèi)型中的成員變量。
* 使用枚舉類(lèi)型中的values()方法獲取枚舉類(lèi)型中的成員變量 // 循環(huán)由values()方法返回的數(shù)組 public static void main(String[] args) System.out.println("方式一:"); for (int i = 0; i < ColorEnum.values().length; i++) System.out.println("枚舉類(lèi)型成員變量:" + ColorEnum.values()[i]); System.out.println("方式二:"); for (ColorEnum c : ColorEnum.values()) System.out.println("枚舉類(lèi)型成員變量:" + c);
執(zhí)行結(jié)果:

(2)valueOf()與compareTo()方法
枚舉類(lèi)型中靜態(tài)方法valueOf()可以實(shí)現(xiàn)將普通字符串轉(zhuǎn)換為枚舉實(shí)例,而compareTo()方法用于比較兩個(gè)枚舉對(duì)象在定義時(shí)的順序。
示例:枚舉中valueOf()與compareTo()方法的使用。
* 枚舉中valueOf()與compareTo()方法的使用 public class EnumMethodTest // 定義比較枚舉類(lèi)型方法,參數(shù)類(lèi)型為枚舉類(lèi)型 public static void compare(ColorEnum c) // 根據(jù)values()方法返回的數(shù)組做循環(huán)操作 for (int i = 0; i < ColorEnum.values().length; i++) System.out.println(c + "與" + ColorEnum.values()[i] + "的比較結(jié)果為:" + c.compareTo(ColorEnum.values()[i])); public static void main(String[] args) // 使用valueOf()將字符串轉(zhuǎn)換為枚舉實(shí)例 ColorEnum c = ColorEnum.valueOf("BLUE");
執(zhí)行結(jié)果:

說(shuō)明:調(diào)用compareTo()方法返回的結(jié)果,正值代表方法中的參數(shù)在調(diào)用該方法的枚舉對(duì)象位置之前;0代表兩個(gè)相互比較的枚舉成員的位置相同;負(fù)值代表方法中參數(shù)在調(diào)用該方法的枚舉對(duì)象位置之后。
(3)ordinal()方法
該方法用于得到枚舉成員的位置索引。
示例:枚舉中ordinal()方法的使用。
public class EnumOrdinalTest public static void main(String[] args) for (int i = 0; i < ColorEnum.values().length; i++) // 在循環(huán)中獲取枚舉類(lèi)型成員的索引位置 System.out.println(ColorEnum.values()[i] + "在枚舉類(lèi)型中位置索引值" + ColorEnum.values()[i].ordinal());
執(zhí)行結(jié)果:

2.2 枚舉類(lèi)型中的構(gòu)造方法
在枚舉類(lèi)型中,可以添加構(gòu)造方法,但是規(guī)定這個(gè)構(gòu)造方法必須為private修飾符修飾。
示例:在枚舉類(lèi)型中,可以添加構(gòu)造方法。
public class EnumIndexTest RED(1, "我是紅色"), BLUE(2, "我是藍(lán)色"), GREEN(3, "我是綠色"); private final String description; private ColorEnum(int value, String description) this.description = description; public String getDescription() public static ColorEnum valueOf(int value) public static void main(String[] args) for (ColorEnum c : ColorEnum.values()) System.out.println("枚舉成員:" + c + " 值:" + c.getValue() + " 描述:" + c.getDescription()); System.out.println("值轉(zhuǎn)換成枚舉:" + ColorEnum.valueOf(2)); System.out.println("字符串轉(zhuǎn)換成枚舉:" + ColorEnum.valueOf("GREEN"));
執(zhí)行結(jié)果:

2.3 枚舉中實(shí)現(xiàn)接口
除了可以使用上述示例的方法定義getDescription()方法獲取枚舉類(lèi)型成員變量是的描述之外,還可以將這個(gè)getDescription()方法放置在接口中,使枚舉類(lèi)型實(shí)現(xiàn)接口,然后使每個(gè)枚舉類(lèi)型實(shí)現(xiàn)接口中的方法。
示例:在項(xiàng)目中創(chuàng)建d接口和枚舉類(lèi)型的AnyEnum類(lèi),在枚舉類(lèi)型AnyEnum類(lèi)中實(shí)現(xiàn)帶方法的接口,使每個(gè)枚舉類(lèi)型成員實(shí)現(xiàn)該接口中的方法。
public String getDescription(); public enum AnyEnum implements d public String getDescription() public String getDescription() public String getDescription() public static void main(String[] args) for (AnyEnum c : AnyEnum.values()) System.out.println("枚舉成員:" + c + " 值:" + c.getValue() + " 描述:" + c.getDescription());
執(zhí)行結(jié)果:

3、使用枚舉類(lèi)型的優(yōu)勢(shì)
枚舉類(lèi)型聲明提供了一種用戶友好的變量定義方法,枚舉了某種數(shù)據(jù)類(lèi)型所有可能出現(xiàn)的值??偨Y(jié)枚舉類(lèi)型,它具有以下特點(diǎn):
(1)類(lèi)型安全。
(2)緊湊有效的數(shù)據(jù)定義。
(3)可以和程序其他部分完美交互。
(4)運(yùn)行效率高。
|