枚举Enum
来源:互联网 发布:隔音棉 知乎 编辑:程序博客网 时间:2024/06/15 16:02
枚举用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
Enum是java.lang包中的一个抽象类,实现了Comparable,以及Serializable接口,是jdk1.5提供的新特性,主要是方便习惯用枚举操作的人员,所以在java中枚举事实上处于一种可有可无的地位,毕竟在jdk1.5以前,是不提供枚举的,依然不影响开发,但是通过使用枚举可以提高程序的可读性以及健壮性。另外通过enum关键字修饰的类默认继承自Enum类,若是自定义了构造方法,则所有枚举实例必须调用自定义的构造方法初始化。
首先看一下不使用枚举的例子:
public class Color { public String name; public static final Color RED = new Color("红色"); public static final Color GREED = new Color("绿色"); public static final Color BLUE = new Color("蓝色"); public Color(String name){ this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
- 而使用枚举的例子如下(若是定义构造方法,则所有实例必须明确使用此构造方法初始化):
public enum Color1 { RED("红色"),GREEN("绿色"),BLUE("蓝色"); String name; Color1(String name){ this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
- 通过使用枚举,我们可以使得代码更清晰,因为它可以描述特定的值,并且有效地防止用户提供无效值。同时也方便了我们轻松获取枚举的取值范围:
public class EnumTest { @Test public void test1(){ for(Color1 c : Color1.values()){ System.out.println(c.name()+"-->"+c.ordinal()); } }}
- 于此同时,在jdk1.5后switch中还加入了对Enum对象的判断功能:
@Test public void test2(){ switch (Color1.RED){ case RED: System.out.println("这是红色"); break; case GREEN: System.out.println("这是绿色"); break; case BLUE: System.out.println("这是蓝色"); break; } }
- 同时我们可以让枚举实现各种接口:
interface ColorInfo { public void printColor();}public enum Color2 implements ColorInfo { RED("红色") { public void printColor() { System.out.println("最喜欢的颜色是"+name); } }, GREEN("绿色") { public void printColor() { System.out.println("最富有活力的颜色:"+name); } }, BLUE("蓝色") { public void printColor() { System.out.println("这是天空的颜色:"+name); } }; String name; Color2(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
- 使用如下:
@Test public void test3(){ for(ColorInfo ci : Color2.values()){ ci.printColor(); } }
- 当然我们还可以直接在Enum类中定义抽象方法:
public enum Color3 { RED("红色") { public void printColor() { isRed(); } public void isRed(){ System.out.println("这是一个红色"); } }, GREEN("绿色") { public void printColor() { System.out.println("最富有活力的颜色:" + name); } }, BLUE("蓝色") { public void printColor() { System.out.println("这是天空的颜色:" + name); } }; String name; Color3(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract void printColor();}
效果是一样的。
- 另外在java1.5以后加入了EnumSet和EnumMap两个类集的支持,这个了解即可
@Test public void test4(){ EnumMap<Color3,String> enumMap = new EnumMap(Color3.class); enumMap.put(Color3.RED,"红色"); enumMap.put(Color3.GREEN,"绿色"); enumMap.put(Color3.BLUE,"蓝色"); for(Map.Entry<Color3,String> entry : enumMap.entrySet()){ System.out.println(entry.getKey()+"-->"+entry.getValue()); } } @Test public void test5() { EnumSet<Color3> enumSet = EnumSet.allOf(Color3.class); Iterator<Color3> iterator = enumSet.iterator(); while(iterator.hasNext()){ iterator.next().printColor(); } }
阅读全文
0 0
- 枚举 ENum
- enum枚举
- Enum:枚举
- enum 枚举
- 枚举(enum)
- Enum 枚举
- enum(枚举)
- 枚举 Enum
- Enum枚举
- 枚举 Enum
- 枚举Enum
- enum枚举
- enum 枚举
- 枚举enum
- 枚举enum
- enum 枚举
- 枚举(Enum)
- 枚举 enum
- java进阶,Spring,SpringMVC等总结
- 主成分分析(PCA)算法原理介绍
- c++中iterator迭代器和vector容器
- uva 12012
- MVP模式从入门到精通
- 枚举Enum
- POJ 3233 Matrix Power Series 笔记
- Oracle函数总结:字符函数
- Java的web
- 【02】框架学习—Hibernate第一个入门案例详解
- HDOJ 2092 整数解
- GitHub的简单使用
- JVM(二)
- EL与JSTL