在Java1.5之后,引入了枚举新的特性,在之前,java有两种定义新类型的方式:类和接口。但是在特殊情况下,满足不了我们的需求,比如我们定义一个Color类,它只能有Red,Blue,Green三种值,对于其他的值来说都是无效的。为引入枚举之前,我们一般使用其私有化其构造方法,然后在其内部实例化三个常量,然后再取值。这样不仅繁琐,而且带来了更多不安全的问题。
package andy.enumtype.test;
/**
* @author Zhang,Tianyou
* version:2014-11-24 上午11:03:06
*
*
*/
public class Color {
public static final Color RED = new Color("红色");
public static final Color GREEN = new Color("绿色");
public static final Color BLUE = new Color("蓝色");
private Color(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static Color getInstance(int i) {
switch (i) {
case 0:
return Color.RED;
case 1:
return Color.GREEN;
case 2:
return Color.BLUE;
default:
return null;
}
}
public static void main(String[] args){
Color color = Color.RED;
System.out.println(color.getName());
}
}
但是这样只能从RED BLUE GREEN 三个中获取值。
在枚举中如下实现:
package andy.enumtype.test;
/**
* @author Zhang,Tianyou
* version:2014-11-24 上午11:43:07
*
*
*/
public enum Color1 {
RED("红色"), BLUE("蓝色"), GREEN("绿色");
private Color1(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args){
Color1 color = Color1.RED;
System.out.println(color.getName());
//c.ordinal() 获取序号
for (Color1 c : Color1.values()) {
System.out.println(c.ordinal() + "----" + c.getName());
}
}
}
还支持EnumSet,和EnumMap等操作。