Java中的魔法值和解决方法

魔法值在代码中可能导致理解和维护困难。本文通过一个示例解释了魔法值的问题,即直接在代码中使用的、含义不清晰的数值。解决方法是使用静态常量或枚举来代替这些值,提高代码的可读性和可维护性,例如将`360723`定义为`static final`常量`REG`。这样做可以在修改值时确保一致性,减少出错机会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、什么是魔法值

二、解决方法


一、什么是魔法值

魔法数值、魔法数字、魔法值,这是一个东西,不同的叫法。

所谓魔法值,是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义,数字意义必须通过阅读其他代码才能推断出来,这样给后期维护或者其他人员阅读代码,带来了极大不便。

例如:

if( flag = 5 ){
	a = 2;
}else{
    a = 3;
}

当其他人员阅读时就会引起深深的疑问:为什么flag=5时做这个?flag=5背后隐藏着什么秘密?flag=5意味着什么? 如果时间久,原开发人员也要重新看代码才能明白当时的深意,这就大大增加了二次开发和维护时的难度。

我的错误

原代码如下:

 String region ="360723";
        if ("360723".equals(region) || Constant.ADMIN.equals(Common.isBlank(user.get("roleCode")))) {
            Map para = new HashMap();
            para.put("code",region);
            para.put("codeLike","1");
            List regionList = regionService.selectListByPara(para);
            request.setAttribute("regionList", regionList);
        }

二、解决方法

使用static final 定义常量或使用enum值。

    // 区划码
    protected static final String REG = "360723";
 // 区划码
    protected static final String REG = "360723";
    
    public String list(HttpServletRequest request) {
        Map user = ShiroUtil.getCurrentUser();
        String region ="360723";
        if (REG.equals(region) || Constant.ADMIN.equals(Common.isBlank(user.get("roleCode")))) {
            Map para = new HashMap();
            para.put("code",region);
            para.put("codeLike","1");
            List regionList = regionService.selectListByPara(para);
            request.setAttribute("regionList", regionList);
        }

:使用static final声明常量,可以方便以后维护更新。修改变量的值时只用修改一处,还不用担心修改了其它不该修改的常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值