文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中的魔法值概念是什么

2023-06-29 01:53

关注

本文小编为大家详细介绍“Java中的魔法值概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的魔法值概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Java中的魔法值

背景

使用IDEA时,启用了阿里的代码规范检查,其中就有一项提示是不允许任何魔法值出现在代码里,于是出于好奇就了解一下到底啥时魔法值。

介绍

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

魔法数字,在编程领域指的是莫名其妙出现的数字。数字的意义必须通过详细阅读才能推断出来

if("1".equals(dangerKey)){            BigDecimal warningValue = new BigDecimal(JedisUtils.get(WARNING_VALUE_KEY));            model.addAttribute("isDanger", true);            model.addAttribute("warningValue", warningValue);        }

上面代码中的字符串1就是一个魔法值,在未读整段代码之前,我并不知道这个字符串1代表什么意思,只有把这个字符串带入后面的代码逻辑才能判断该值的真实意义,而且如果多次出现,这就大大的降低了代码的可阅读性。所以我们在代码中应该极力避免产生魔法值。

解决方法

** 使用枚举类型或者使用static final修饰常量 **

//预警值标识    public static final String DANGERKEY_TRUE ="1";    if(DANGERKEY_TRUE.equals(dangerKey)){            BigDecimal warningValue = new BigDecimal(JedisUtils.get(WARNING_VALUE_KEY));            model.addAttribute("isDanger", true);            model.addAttribute("warningValue", warningValue);        }

以上就是使用static final的方式替换的魔法值,这样就可以避免了。如果在代码中多次使用的话,只需更声明的地方就可以达到全局的效果。

提示:静态常量的命名最好全是大写字母,如果是多个单词需要分割,可以使用下划线分割。

小结:魔法值的问题对于代码逻辑来说,并不是什么要命的事情,即使不修改也基本不影响代码的正常运行,我以前没有安装阿里代码检查规范时,一样这么使用,也没出现过啥问题。好吧,应该说但是了。但是,遵循公认的代码规范,可以有效的避免开发过程的一些小问题(最让人头疼的往往都是一些小问题引起的),提升开发的效率和代码的可阅读性,老老实实按照规范来,自然就会受益良多,继续加油! 

Java的魔法值概念

想象一下,当你入职一家新公司,打开工具看以前同事的项目时,突然看到下面这段代码

String[] catNames = new String[7];String[] dogNames = new String[7];for(int i = 0; i < 7; i++) {    //此处省略若干行}

你心中一定很凌乱,可能还会在心底默默问候下写这段代码的前同事。

在没有注释的情况下,此处的i < 7,你根本无法知道是要处理 dogNames数组还是catNames数组,你还要继续去看循环体中的内容才能来推断这个数字的含义。这里的7就是魔法值。

所谓的魔法值,就是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义。

魔法值简单好用,任何项目基本上都会有魔法值的出现。但魔法值就像一段没有注释的代码,它的出现使得程序的可读性大大下降,甚至只有当事人才知道。这对于项目或者别的开发来说,无疑都是不利的。同时,如果到处用到魔法值,那需要修改的时候,就要修改很多地方,这不仅耗费时间,还很容易会遗漏。

魔法值的问题就是含义不明且无法统一使用,要把它们统一表示,并加上注释,我们可以用static final 定义常量或使用enum值。

static final int CAT_NUM = 7;String[] catNames = new String[CAT_NUM];for(int i = 0; i < CAT_NUM; i++) {    //此处省略若干行}for(int i = 0; i < PET.DOG.getNum(); i++) {    //此处省略若干行}

当然此处用catNames.length,dogNames.length也不会引起混淆。

其实魔法值也并不是要完全禁止不用,毕竟每次用到数值就要去定义常量或者在enum中新增元素还是很麻烦的。只要保障你的数值不会让别人难以阅读,你就可以使用魔法值。一般 -1、0 和 1不被视为魔法值。

读到这里,这篇“Java中的魔法值概念是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯