JDK1.5引入了新的類型——枚舉。在 Java 中它雖然算個“小”功能,卻給我的開發帶來了“大”友善。
用法一:常量
在JDK1.5 之前,我們定義常量都是: public static final.... 。現在好了,有了枚舉,可以把相關的常量分組到一個枚舉類型裡,而且枚舉提供了比常量更多的方法。
Java代碼
public enum Color
{
RED, GREEN, BLANK, YELLOW
}
測試代碼
public class Test
{
public static void main(String[] args)
{
Color red = Color.RED;
System.out.println(red);
}
}
輸出RED
用法二:switch
JDK1.6之前的switch語句隻支援int,char,enum類型,使用枚舉,能讓我們的代碼可讀性更強。
Java代碼
public class EnumTest
{
public static void main(String[] args)
{
ColorEnum color = ColorEnum.RED;
switch (color)
{
case RED:
color = color.RED;
break;
case GREEN:
color = color.BLANK;
break;
case YELLOW:
color = color.YELLOW;
break;
}
System.out.println(color);
}
}
輸出RED;
用法三:向枚舉中添加新方法
如果打算自定義自己的方法,那麼必須在enum執行個體序列的最後添加一個分号。而且 Java 要求必須先定義 enum 執行個體。
java代碼
public enum ColorEnum
{
RED("紅色", 1), GREEN("綠色", 2), BLANK("黑色", 3), YELLOW("黃色", 4);
private String name;
private int index;
private ColorEnum(String name , int index)
{
this.name = name;
this.index = index;
}
public static String getName(int index)
{
for (ColorEnum color : ColorEnum.values())
{
if (color.index == index)
{
return color.name;
}
}
return null;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getIndex()
{
return index;
}
public void setIndex(int index)
{
this.index = index;
}
}
測試代碼:
public class EnumTest
{
public static void main(String[] args)
{
for(int i=1; i <=4; i++)
{
test(i);
}
}
public static void test(int index)
{
String name = ColorEnum.getName(index);
System.out.println(name);
}
}
輸出:分别輸出 紅色,綠色,黑色,黃色
用法四:覆寫枚舉的方法
下面給出一個toString()方法覆寫的例子。
java代碼:
public enum ColorEnum
{
RED("紅色", 1), GREEN("綠色", 2), BLANK("黑色", 3), YELLOW("黃色", 4);
private String name;
private int index;
private ColorEnum(String name, int index)
{
this.name = name;
this.index = index;
}
// 覆寫方法
@Override
public String toString()
{
return this.index + "_" + this.name;
}
}
測試代碼:
public class EnumTest
{
public static void main(String[] args)
{
test();
}
public static void test()
{
ColorEnum[] values = ColorEnum.values();
for (ColorEnum color : values)
{
String c = color.toString();
System.out.println(c);
}
}
}
輸出:分别輸出 1_紅色, 2_綠色, 3_黑色, 4_黃色;
用法五:實作接口
所有的枚舉都繼承自java.lang.Enum類。由于Java 不支援多繼承,是以枚舉對象不能再繼承其他類。
java代碼:
public interface Behaviour
{
void print();
String getInfo();
}
public enum ColorEnum implements Behaviour
{
RED("紅色", 1), GREEN("綠色", 2), BLANK("黑色", 3), YELLOW("黃色", 4);
private String name;
private int index;
private ColorEnum(String name, int index)
{
this.name = name;
this.index = index;
}
@Override
public void print()
{
System.out.println("輸出方法");
}
@Override
public String getInfo()
{
return this.index + "_" + this.name();
}
}
測試代碼:
public class EnumTest
{
public static void main(String[] args)
{
test();
}
public static void test()
{
ColorEnum[] values = ColorEnum.values();
for (ColorEnum color : values)
{
String c = color.getInfo();
System.out.println(c);
}
}
}
輸出:分别輸出 1_紅色, 2_綠色, 3_黑色, 4_黃色
用法六:使用接口組織枚舉
java代碼
public interface Food{
enum CoffeeEnum implements Food
{
BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO
}
enum DessertEnum implements Food
{
FRUIT, CAKE, GELATO
}
}
測試代碼:
public class InterfaceEnum
{
public static void main(String[] args)
{
DessertEnum[] values = Food.DessertEnum.values();
for (DessertEnum dessert : values)
{
System.out.println(dessert + " ");
}
System.out.println("=====");
for (CoffeeEnum coffee : Food.CoffeeEnum.values())
{
System.out.println(coffee + " ");
}
System.out.println("=====");
//搞個實作接口,來組織枚舉,簡單講,就是分類吧。
//如果大量使用枚舉的話,這麼幹,在寫代碼的時候,就很友善調用啦。
//還有就是個"多态"的功能吧
Food food = Food.DessertEnum.CAKE;
System.out.println(food);
food = CoffeeEnum.BLACK_COFFEE;
System.out.println(food);
}
}
輸出:分别輸出 FRUIT CAKE GELATO =====BLACK_COFFEE DECAF_COFFEE LATTE CAPPUCCINO ===== CAKE BLACK_COFFEE
用法七:關于枚舉集合的使用
java.util.EnumSet和java.util.EnumMap是兩個枚舉集合。EnumSet保證集合中的元素不重複;EnumMap中的 key是enum類型,而value則可以是任意類型。關于這個兩個集合的使用就不在這裡贅述,可以參考JDK文檔。
關于枚舉的實作細節和原理請參考:
參考資料:《ThinkingInJava》第四版
多說一句,用法4,用法5,枚舉執行個體多個參數也是可以的:
public enum ColorEnum implements Behaviour
{
RED("紅色", "這是紅色", 1), GREEN("綠色", "這是綠色", 2), BLANK("黑色", "這是黑色", 3), YELLOW("黃色", "這是黃色", 4);
}
轉自:https://blog.csdn.net/qq_27093465/article/details/52180865