Java中枚举其实就是静态常量,今天发现枚举里面其实还能加方法,学习了下,
代码如下:
1 package org.pine.test; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public enum Color { 7 //静态常量 8 RED(1,"红色"),GREEN(2,"绿色"),BLUE(3,"蓝色"),YELLOW(7,"黄色"); 9 //属性 10 private int index; 11 private String name; 12 //构造方法 13 Color(int index, String name){ 14 this.index=index; 15 this.name=name; 16 } 17 //set、get 18 public int getIndex() { 19 return this.index; 20 } 21 22 public void setIndex(int index) { 23 this.index = index; 24 } 25 26 public String getName() { 27 return this.name; 28 } 29 30 public void setName(String name) { 31 this.name = name; 32 } 33 34 /** 35 *通过index获取name 36 * @param index 37 * @return name 38 */ 39 public static String getName(int index){ 40 Color[] colors = Color.values(); 41 for(Color color:colors){ 42 if(color.getIndex()==index){ 43 return color.getName(); 44 } 45 } 46 throw new RuntimeException("Could not find the Color."); 47 } 48 49 /** 50 * 通过name获取index 51 * @param name 52 * @return index 53 */ 54 public static int getIndex(String name){ 55 Color[] colors = Color.values(); 56 for(Color color:colors){ 57 if(color.getName().equals(name)){ 58 return color.getIndex(); 59 } 60 } 61 throw new RuntimeException("Could not find the Color."); 62 } 63 64 /** 65 *通过index获取Color 66 * @param index 67 * @return Color 68 */ 69 public static Color getColor(int index){ 70 Color[] colors = Color.values(); 71 for(Color color:colors){ 72 if(color.getIndex()==index){ 73 return color; 74 } 75 } 76 throw new RuntimeException("Could not find the Color."); 77 } 78 79 /** 80 * 通过name获取Color 81 * @param name 82 * @return Color 83 */ 84 public static Color getColor(String name){ 85 Color[] colors = Color.values(); 86 for(Color color:colors){ 87 if(color.getName().equals(name)){ 88 return color; 89 } 90 } 91 throw new RuntimeException("Could not find the Color."); 92 } 93 94 /** 95 * 红路灯变换 96 */ 97 public static Color next(Color color){ 98 Map<Color,Color> map = new HashMap(); 99 map.put(RED,GREEN); 100 map.put(GREEN,YELLOW); 101 map.put(YELLOW,RED); 102 return map.get(color); 103 } 104 105 /** 106 * 重写toString 107 * @return 108 */ 109 @Override 110 public String toString() { 111 return "Color{" + 112 "index=" + index + 113 ", name='" + name + '\'' + 114 '}'; 115 } 116 }
测试类:
1 package org.pine.test; 2 3 public class ColorTest { 4 5 public static void main(String[] args){ 6 Color r = Color.RED; 7 r.setIndex(4); 8 9 Color g = Color.GREEN; 10 g.setIndex(5); 11 12 Color b= Color.BLUE; 13 b.setIndex(6); 14 15 System.out.println(r.getIndex()); 16 System.out.println(g.getIndex()); 17 System.out.println(b.getIndex()); 18 19 System.out.println(r); 20 System.out.println(g); 21 System.out.println(b); 22 23 //通过index获取name 24 String name = Color.getName(4); 25 System.out.println(name); 26 27 //通过name获取index 28 int index = Color.getIndex("绿色"); 29 System.out.println(index); 30 31 //通过index获取Color 32 Color c1 = Color.getColor(5); 33 System.out.println(c1); 34 35 //通过name获取Color 36 Color c2 = Color.getColor("蓝色"); 37 System.out.println(c2); 38 39 Color c3 = Color.valueOf("RED"); 40 System.out.println(c3); 41 //红绿灯变换 42 System.out.println(Color.next(Color.RED)); 43 System.out.println(Color.next(Color.GREEN)); 44 System.out.println(Color.next(Color.YELLOW)); 45 } 46 }