Java 枚举类

参考博客:  http://www.cnblogs.com/zhaoyanjun/p/5659811.html

直接上代码:

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 //import java.lang.Enum;  //这TM是默认导入的包
 4 
 5 public enum Color {
 6     WHITE(1,"WHITE"),
 7     RED(2,"RED"),
 8     ORANGE(3,"ORANGE"),
 9     YELLOW(4,"YELLOW"),
10     GREEN(5,"GREEN"),
11     BLUE(6,"BLUE"),
12     PURPLE(7,"PURPLE"),
13     BLACK(8,"BLACK")
14     ;
15     
16     private Integer id;
17     private String name;
18     
19     private Color(Integer id, String name) {
20         this.id = id;
21         this.name = name;
22     }
23     
24     public Integer getId() {
25         return id;
26     }
27     
28     public String getName() {
29         return name;
30     }
31     //到上面截至是一般枚举类的基本写法
32     
33     private static Map<Integer, Color> map = new HashMap<Integer, Color>();
34     
35     static {
36         for(Color enums : Color.values()) {//后面会讲到这个方法输出的是什么
37             map.put(enums.getId(), enums);
38         }
39     }
40     
41     public static Color valueOf(int id) {//看清楚返回值
42         return valueOf(id, null);
43     }
44     
45     public static Color valueOf(int id, Color color) {
46         Color result = map.get(id);
47         return result == null ? color : result;
48     }
49     
50     //比如实际应用中可能有一些特殊的癖好列出所有颜色的名字  
51     public static String[] listAllColor() {
52         Color[] colors = Color.values();
53         String[] result = new String[colors.length];
54         for(int i = 0; i < colors.length; i++) {
55             result[i] = colors[i].getName();
56         }
57         return result;
58     }
59     
60     //再比如我想写一个nameOf
61     public static String nameOf(int id) {
62         Color temp = map.get(id);
63         return temp == null ? null : temp.getName();
64     }
65 }

测试一下:

1     public static void main(String[] args) {
2         //Hello World
3         System.out.println(
4                 Arrays.toString(Color.values()));
5         System.out.println(Color.valueOf(3).getName());
6         System.out.println(Color.nameOf(3));
7         System.out.println(
8                 Arrays.toString(Color.listAllColor()));
9     }

结果如下:


好了讲一下values这个方法返回的是什么,返回的是那些枚举对象的名字不是name。

或者说返回的是枚举类下的所有枚举。

改成这个样子,运行结果如下:

这下明白返回的是啥了吧。

原文地址:https://www.cnblogs.com/zuosy/p/7609383.html