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的两个方法,当然使用该方法的前提的是枚举类中必须有这两个方法,要不然就会抛异常。

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值