参考博客: 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。
或者说返回的是枚举类下的所有枚举。
改成这个样子,运行结果如下:
这下明白返回的是啥了吧。