该文章仅限于自我学习,并没有什么比较值得学习的地方,只是"有感而发"
在工作中,我经常会遇到一些有关于特定的常量值,例如:管理员,项目经理,开发人员,普通用户等,针对于这种有很多选项的常量,我们一般都会找一个对应的数字来代表,例如
0,1,2,3,4这种。
针对于这种一一对应的情况,我们一般都会使用枚举类去实现。
在今天之前我的枚举类都是这样写的
public enum UserEnum {
GENERAL_USER(1, "普通用户"),
BAN(2,"被封号"),
ADMIN(3,"管理员");
private Integer code;
private String value;
UserEnum(Integer code, String value) {
this.code = code;
this.value = value;
}
public static String getValue(Integer code) {
if (code == null) {
return "";
}
for (UserEnum user : UserEnum.values()) {
if (user.code.intValue() == code.intValue()) {
return user.value;
}
}
return "";
}
}
但是我发现一旦枚举类多起来,你就需要在每一个枚举类中都写一个getValue的方法太麻烦了,于是我就想着能不能写一个公共的方法来实现这个需求:
public static String getEnumValueByCode(Class<? extends Enum<?>> clazz, Integer code) {
for (Enum<?> enumConstant : clazz.getEnumConstants()) {
try {
if (Integer.parseInt(String.valueOf(clazz.getMethod("getCode").invoke(enumConstant))) == code.intValue()) {
return String.valueOf(clazz.getMethod("getValue").invoke(enumConstant));
}
} catch (Exception e) {
e.printStackTrace();
}
}
return "";
}
该方法主要是基于反射去实现的,通过反射去获取枚举类中getCode和getValue的两个方法,当然使用该方法的前提的是枚举类中必须有这两个方法,要不然就会抛异常。
虽然使用反射可以会影响一点性能,但是这样提高了代码的复用性,在我看来整体来说还是利大于弊