Enum
-
Enum是什么:
enum是计算机编程语言中的一种数据类型。枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内。
-
Enum特性
-
枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法
-
可以实现一个或多个接口,但枚举类不能继承其他类(枚举类,编译后会自动继承Enum并用final修饰,无法继承其他类).
// 定义 public enum ColorEnum { BLACK, WHITE } //jad反编译后 // final修饰,无法被继承 public final class ColorEnum extends Enum { …… }
-
没有任何方式(new,clone,反射,序列化)可以手动创建枚举实例
-
枚举类是线程安全的
-
枚举类型是类型安全的(typesafe)
-
常用方法一:
通过反射获取Enum内所有类型
public static List<Integer> getEnumTypeAll(String en){
List<Integer> list = new ArrayList<>();
try{
Class<?> clz = Class.forName("com..common.enums.MessageEnum");
//获取内部类
Class[] innerClazz = clz.getDeclaredClasses();
// 遍历
for (Class c : innerClazz) {
String simpleName = c.getSimpleName();
if (en.equals(simpleName)) {
//反射获取Enum
Class<Enum> enumClass = (Class<Enum>) Class.forName(c.getName());
//获取所有枚举实例
Enum[] enumConstants = enumClass.getEnumConstants();
Method getType = enumClass.getMethod("getType");
for (Enum e : enumConstants) {
list.add((Integer) getType.invoke(e));
}
}
}
}catch(Exception e){
System.out.println("MessageEnum.getEnumTypeAll()获取{}类型Type异常:{}");
}
return list;
}
常用发放二:
根据根据枚举中的一个值获取另一些值
//此方法可以灵活使用,可以获取Enum的某一属性,也可以获取属性中的值
public static String getName(Integer index) {
for (ColorEnum c : ColorEnum.values()) {
if (c.getIndex() == index) {
return c.getName();
}
}
return null;
}