返回顶部
首页 > 资讯 > 后端开发 > Python >Java中的魔法值解决
  • 908
分享到

Java中的魔法值解决

2024-04-02 19:04:59 908人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录Java中的魔法值背景介绍解决方法Java的魔法值概念Java中的魔法值 背景 使用idea时,启用了阿里的代码规范检查,其中就有一项提示是不允许任何魔法值出现在代码里,于是出于

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不被视为魔法值。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Java中的魔法值解决

本文链接: https://lsjlt.com/news/137989.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中的魔法值解决
    目录Java中的魔法值背景介绍解决方法Java的魔法值概念Java中的魔法值 背景 使用IDEA时,启用了阿里的代码规范检查,其中就有一项提示是不允许任何魔法值出现在代码里,于是出于...
    99+
    2024-04-02
  • java魔法值
    一、什么是魔法值 魔法值,也叫做魔法数值、魔法数字,通常是指在代码编写时莫名出现的数字,无法直接判断数值代表的含义,必须通过联系代码上下文分析才可以明白,严重降低了代码的可读性。除数字之外,代码中作为key值的常量字符串也被认为是魔法值,尽...
    99+
    2023-09-22
    java 开发语言
  • Java中的魔法值概念是什么
    本文小编为大家详细介绍“Java中的魔法值概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的魔法值概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Java中的魔法值背景使用IDEA时,...
    99+
    2023-06-29
  • 深度解析HashMap:探秘Java中的键值存储魔法
    文章目录 一、 **前言**1.1 介绍HashMap在Java中的重要性1.2 引出本文将深入挖掘HashMap的内部机制 二、 **HashMap的基本概念**2.1 什么是HashMap?2.2 为什么HashMap在...
    99+
    2023-12-22
    java 源代码管理
  • JavaScript的魔法值是什么
    JavaScript的魔法值是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。大家好,我是鱼皮,今天通过一件事情,分享写代码...
    99+
    2024-04-02
  • java传值乱码解决方法
    在做JavaWeb时,总是时不时的会遇到中文传值乱码问题,在你把所有”ISO-8859-1”改成“UTF-8”发现还是没什么用。于是我就找到了一个百试百灵的方法(至少目前我是),就是强行转换成“UTF-8”编码。看代码:@RequestMa...
    99+
    2017-11-11
    java 乱码
  • 透视 JavaScript 解构赋值:简化代码的魔法
    要使用解构赋值,只需在变量声明中使用一对大括号,并将要提取的值的名称放在其中即可。例如,以下代码从一个对象中提取 name 和 age 属性: const person = { name: "John", age: 30 }; ...
    99+
    2024-02-11
    JavaScript 解构赋值 对象 数组 变量
  • Java 语法的魔法杖:点石成金的代码魔法师
    Java 语言凭借其强大的特性和广泛的适用性,在编程界占据着举足轻重的地位。其中,点运算符(.)扮演着至关重要的角色,堪称代码中的魔法杖,赋予开发者点石成金的能力。本文将深入探讨 Java 中点运算符的用法及其在实际开发中的应用。 点运算...
    99+
    2024-04-02
  • java中Servlet Cookie取不到值原因解决办法
    java中Servlet Cookie取不到值原因解决办法现象:在测试带Cookie的HTTP请求时发现,服务端用request.getHeader("cookie")可以去到值; 但是用request.getCookies()却不行 Co...
    99+
    2023-05-31
    java servlet cookie
  • Java 中的 Unsafe 魔法类的作用大全
    Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java...
    99+
    2024-04-02
  • 详解Python中魔法方法的使用
    目录迭代器的大小元编程自省(introspection)魔法属性创建自己魔法方法python中的魔法方法是一些可以让你对类添加“魔法”的特殊方法,它们经常是两...
    99+
    2022-12-19
    Python魔法方法使用 Python魔法方法
  • Java中如何解决null值引起的Bug
    这篇文章主要讲解了“Java中如何解决null值引起的Bug”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中如何解决null值引起的Bug”吧!业务中的空值场景存在一个 UserSe...
    99+
    2023-06-16
  • Python中的魔法方法
    python中的魔法方法是一些可以让你对类添加“魔法”的特殊方法,它们经常是两个下划线包围来命名的。Python的魔法方法,也称为dunder(双下划线)方法。大多数的时候,我们将它们用于简单的事情,例如构造函数(init)、字符串表示(s...
    99+
    2023-05-14
    Python 运算符
  • php中env没有值的解决方法
    这篇文章主要介绍了php中env没有值的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php env没有值的解决办法:1、修改php的配置文件php.ini的配置项;...
    99+
    2023-06-15
  • Java中NullPointerException的解决方法
    本篇内容介绍了“Java中NullPointerException的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读...
    99+
    2024-04-02
  • Jython 的魔法:在 Java 中释放 Python 的力量
    Jython是一个高度集成的Python实现,允许在Java虚拟机(JVM)上执行Python代码。它将Python的动态性和灵活性与Java的健壮性和可扩展性结合在一起,为开发人员提供了一种强大的工具,用于创建跨平台应用程序和扩展现有J...
    99+
    2024-04-02
  • Java 控制流的魔法:解锁编程的潜力
    if-else 语句 if-else 语句用于根据给定的条件执行不同的代码块。语法如下: if (条件) { // 条件为真时执行的代码 } else { // 条件为假时执行的代码 } 例如: int age = 18; if...
    99+
    2024-04-02
  • php中post传值乱码的解决方法
    小编给大家分享一下php中post传值乱码的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php post传值乱码的解决办法:1、在传递前进行编码 ,并在...
    99+
    2023-06-20
  • Lambda 的触手可及:Java 中的函数式魔法
    Lambda 表达式的语法 Lambda 表达式由以下语法定义: (parameters) -> expression 其中: parameters 是一个以逗号分隔的形参列表,可以为空。 expression 是要执行的表达式。...
    99+
    2024-04-02
  • 【基本功】Java魔法类:Unsafe应用解析
    大家好,我是程序员鼓励师美美~《基本功》专栏又上新了:Java中的Unsafe类在提升运行效率、增强底层资源操作能力方面有很大的用处。但如果在开发过程中使用不当,就会出现各种“莫名其妙”的问题。本篇文章将会带领你重新认识它,绕过“开发雷区”...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作