有关 enum的重新理解
有关enum 的再次理解:
所有的枚举都继承自java.lang.Enum类。
说到底enum也只是一个java类,只不过他有几个特殊的点。
1、enum中的各个实例,就是enum的static实例化对象,而他自身将构造函数隐藏,所以我们只能使用代码中写到的实例而不能自己去new一个enum的实例。
2、enum只是个java类,所以自定义函数方法和属性、多态、 重载、实现接口都是被允许的。
3、enum 内部自带name和ordinal,name就是实例的名字,ordinal就是对实例进行的一个排序的序号。所以我们可以使用 “==”或者“equals” 来判断enum是否相等。
4、enum实现了 Comparable 接口,所以我们也可以使用compare,对enum大小进行判断,默认使用的是 ordinal属性。
5、现在的switch可以使用enum作为判断依据。
6、在接口内部实现接口 对实例进行分类
7、java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。
1 package EnumT; 2 3 import java.util.EnumSet; 4 5 public enum ColorEnum { 6 7 /** 8 * 9 * //1、 重写构造方法,使用多个构造方法重载 并使用 10 */ 11 RED,GREEN,BLUE("BULE"); 12 13 private String value = "color"; 14 private ColorEnum() { 15 } 16 17 private ColorEnum(String value){ 18 this.value = value; 19 } 20 21 public String getValue() { 22 return value; 23 } 24 25 public void setValue(String value) { 26 this.value = value; 27 } 28 29 /** 30 * 重写 方法 31 * @return 32 */ 33 @Override 34 public String toString() { 35 return "ColorEnum{" + 36 "value='" + value + '\'' + 37 '}'; 38 } 39 40 static public void main (String... args){ 41 42 /** 43 * 2、name ordinal 44 */ 45 //获取 name 46 String name = ColorEnum.RED.name(); 47 //获取 ordinal 48 int ordinal = ColorEnum.RED.ordinal(); 49 System.out.println("name: "+name+"\t ordinal: "+ordinal); 50 51 /** 52 * 3、equals == 53 */ 54 boolean equal ; 55 // == 判断 是否相等 56 equal = ( ColorEnum.RED==ColorEnum.RED); 57 System.out.println("== : "+equal); 58 // equals 判断相等 59 equal = (ColorEnum.RED.equals(ColorEnum.RED)); 60 System.out.println("equals : "+equal); 61 62 /** 63 * 4、compare 64 * 0、正、负 表示先后顺序 65 */ 66 int e = (ColorEnum.RED.compareTo(ColorEnum.BLUE)); 67 System.out.println("compare :"+e); 68 /** 69 * 5、switch 70 */ 71 ColorEnum colorEnum = ColorEnum.RED; 72 switch (colorEnum){ 73 case RED:break; 74 case BLUE:break; 75 case GREEN:break; 76 77 } 78 /** 79 * 6、EnumSet 80 */ 81 EnumSet<ColorEnum> colorEnumsSet = EnumSet.allOf(ColorEnum.class); 82 for (ColorEnum colorEnum1 :colorEnumsSet){ 83 System.out.println("EnumSet :"+colorEnum1.name()); 84 } 85 86 } 87 88 89 }
运行结果:
ame: RED ordinal: 0 == : true equals : true compare :-2 EnumSet :RED EnumSet :GREEN EnumSet :BLUE Process finished with exit code 0