参考博客:
直接上代码:
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 Mapmap = new HashMap ();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 //再比如我想写一个nameOf61 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 World3 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。
或者说返回的是枚举类下的所有枚举。
改成这个样子,运行结果如下:
这下明白返回的是啥了吧。