java中针对于枚举类中通过code获取value的改进方法

该文章仅限于自我学习,并没有什么比较值得学习的地方,只是"有感而发"

在工作中,我经常会遇到一些有关于特定的常量值,例如:管理员,项目经理,开发人员,普通用户等,针对于这种有很多选项的常量,我们一般都会找一个对应的数字来代表,例如
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 "";
    }

该方法主要是基于反射去实现的,通过反射去获取枚举类中getCodegetValue的两个方法,当然使用该方法的前提的是枚举类中必须有这两个方法,要不然就会抛异常。

虽然使用反射可以会影响一点性能,但是这样提高了代码的复用性,在我看来整体来说还是利大于弊

Je suppose que tu aimes

Origine blog.csdn.net/qq_43649799/article/details/131020302
conseillé
Classement