在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等操作。
时间: 2024-10-11 12:43:38