枚举的一些特殊用法
定义一个基本的枚举类型
public enum Color { RED(10), //每一个枚举都是枚举类型的一个实例 GREEN(20), BLUE(); Color() {} //枚举的构造方法必须是私有的,可以不写默认私有 private int color; Color(int color) { this.color = color; System.out.println(color); } }
枚举可以实现接口
public interface Info { public int getColor(); }
public enum Color implements Info{ RED(10), GREEN(20) , BLUE(); Color() {} private int color; Color(int color) { this.color = color; System.out.println(color); } @Override public int getColor() { return color; } }
@Test public void test3() { System.out.println(Color.RED.getColor()); }
//
10 //构造方法打印的
20 //构造方法打印的
10 //getColor方法执行结果
枚举可以重写抽象方法
public enum Color implements Info{ RED(10) {//每个实例单独实现抽象方法 public String getColor2() { return "red"; } }, GREEN(20) { public String getColor2() { return "green"; } }, BLUE() { public String getColor2() { return "blue"; } }; Color() {} private int color; Color(int color) { this.color = color; System.out.println(color); } @Override public int getColor() { return color; } public abstract String getColor2();//抽象方法写在枚举类中 }
@Test public void test3() { System.out.println(Color.RED.getColor2()); }
//red
枚举的一些基本属性
@Test public void test1() { color = Color.RED; System.out.println(color); System.out.println(color.name()); System.out.println(color.ordinal());//当前枚举在枚举类中的位置 System.out.println(color.toString()); Color[] values = Color.values(); System.out.println(Arrays.toString(values)); }
//
RED
RED
0
RED
[RED, GREEN, BLUE]
枚举中的集合
@Test public void test2() { EnumSet<Color> set = EnumSet.allOf(Color.class);//枚举set set.forEach(item -> { System.out.println(item); }); EnumMap<Color, String> enumMap = new EnumMap<Color, String>(Color.class);//枚举map enumMap.put(Color.RED, "red"); enumMap.put(Color.BLUE, "blue"); enumMap.put(Color.GREEN, "green"); enumMap.forEach((k,v) -> { System.out.println(k +"->" +v); }); }
//
RED
GREEN
BLUE
RED->red
GREEN->green
BLUE->blue