【java】万恶的魔法值

article/2025/9/8 10:51:29

在最近的小云通知项目中,我负责维护后端的开发,也是深刻体会到用魔法值会给维护人员带来多大的痛苦!可谓一个bug改一天……

文章目录

  • 什么是魔法值
  • 怎么处理魔法值

什么是魔法值

首先我们说一下什么是魔法值,所谓魔法值,就是未经预定义的常量,在阿里巴巴java开发手册上也明确规定,不允许使用魔法值。
在这里插入图片描述
这里我们发现,由于B同学用 Id#taobao 来提取缓存中的内容,但是少了下划线,因为缓存中没有匹配的 key 与之相对应,所以在缓存中根本找不到,数据只能去数据库中查找。如果数据量少,那影响比较小,但是如果是几百万条数据,那对于数据库的开销真的是比较严重,查询效率也会随之变慢。
所以在代码中禁止出现魔法值也是必须的。

怎么处理魔法值

知道了魔法值的危害,那么我们就将去解决这个问题

例子一:

if (peopleSum >= 35) {//todo
} else {//todo	
}

这如果让维护人员看,就会感到莫名奇妙,为什么偏偏这么多变量中会有一个35,这个35是什么意思。不知道有没有人像我一样,忽然在一堆业务逻辑里出现一个未定义的常量,头大啊!

那么我们怎么去处理呢?
我们可以声明一个定义的常量来代替35

static final Integer INITIAL_NUMBER = 75;

用常量来说明这是一个初始人数

例子二:

if (notify.getCateId() == 1) {//todo
} else if (notify.getCateId() == 2) {//todo
}

这里是判断通知的类型,1、2 为数据库中通知类型的id,但是我们会发现,如果让没有接触过的人来看,就会很奇怪,1 代表的是什么,2代表的是什么,加大了维护的难度。

我们可以构造一个枚举类去代替。

@Getter
@AllArgsConstructor
@NoArgsConstructor
public enum NotifyCaseEnum {MEETING(1, "会议通知"),SOLITAIRE(2, "接龙"),TASK(3, "作业");private int code;private String msg;}

这样不管是开发人员还是维护人员,在读代码的时候也是清楚明了,方便性大大提升。
所以我们在开发的时候,及时项目规范中没有写出,我们也应该有自我意识,认识到代码的规范性,写出高效优雅得到代码质量。

大家有任何建议和想法也可以在下方评论,一起进步,加油


http://chatgpt.dhexx.cn/article/bJ9AKOI8.shtml

相关文章

什么是java中的魔法值

自从在idea上用了 《阿里巴巴Java开发手册》的插件之后 这里附上对应的插件安装方法:https://developer.aliyun.com/article/224817 偶然发现自己的代码中出现了所谓的 “魔法值” 什么是魔法值呢 所谓魔法值,就是在代码中直接出现的数值,只…

Java中的魔法值和解决方法

目录 一、什么是魔法值 二、解决方法 一、什么是魔法值 魔法数值、魔法数字、魔法值,这是一个东西,不同的叫法。 所谓魔法值,是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义,数字…

java 不要使用魔法值_为什么阿里巴巴Java开发手册中不允许魔法值出现在代码中?...

武培轩 推荐搜索 JavaSpring Boot数据结构MySQLElasticsearchNginx 在阅读《阿里巴巴Java开发手册》时,发现有一条关于关于常量定义的规约,具体内容如下: 图中的反例是将数据缓存起来,并使用魔法值加链路 id 组成 key,…

java 项目减少魔法值_项目代码中魔法值的优雅处理

经常在代码里面会用一些表示有意义的数字,但是如果不写注释的话,过了一段时间我们自己再回去优化代码的时候,可能自己也不清楚这些数字表示的是什么意思了。 如果写注释的话,就要每次使用数字的时候都要写注释了,这样的…

java 魔法值_Java 开发技巧:减少魔法值的使用

1. 前言 重构老代码中遇到了类似这种写法: public void attend(String value){ if ("0".equals(value)) { //todo } else if ("1".equals(value)) { //todo } else { //todo } } 脑壳疼!从 Java 语法上无懈可击,但是从业…

IDEA快速去除魔法值

背景 写代码有的时候为了方便,会在代码里面留下很多字符串之类的变量。这种便便会被定义为魔法值。 这种变量正常来讲不影响阅读的。所以一般情况下,我们都不会去处理它。 但是当项目越来越大的时候,我们发现很多地方都有可能使用了同一个…

魔法值与解决办法

1.什么是魔法值 魔法值是指代码中突然出现的数字,之所以称为魔法值,是因为这个20可以有多种意义。在新来的员工接手你的代码时,他们产生疑问:为什么要设这个20,背后有什么秘密吗。大大降低了代码的可维护性。 2.解决办…

java怎么字符连接换行_Java中的换行、转义字符和连接字符-Go语言中文社区

语句输出的换行 我们之前完成了我们的第一个Java输出语句,接下来我们可以做一个简单的输出换行与不换行操作。 例如:我们输出天王盖地虎和宝塔镇河妖 public class Demo1 { public static void main(String[] args) { System.out.println("天王盖地…

java csv 换行_javacsv如何换行输入

javacsv如何换行输入 [2021-02-10 01:25:25] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐:《PHP视频教 java怎么输入换行…

java输出流怎样换行_Java中输出流续写和换行写方法,需要用到的构造方法的知识点...

/* FileOutputStream​(String name, boolean append) 创建文件输出流以指定的名称写入文件。 FileOutputStream​(File file, boolean append) 创建文件输出流以写入由指定的 File对象表示的文件。 创建指定File对象表示的文件中写入数据的文件输出流 构造方法的参数: String …

Java输入换行结束

问题出现 : 我在写一个程序的时候,会发现当我想要用while()循环得到一组数字的时候,不加控制条件while()循环就不会停止。 Scanner scanner1 new Scanner(System.in);while(scanner1.hasNext()){System.out.println(scanner1.nextInt());} …

java中的换行

纯copy的 \r return 到当前行的最左边 \n newline 向下移动一行,并不移动左右。 \r\n ("\r","\n"和"\r\n"),导致输出结果可能出现错误或不一致。建议在代码中统一使用一个…

Java中换行输出的两种方法

效果: 方法一: public class ChairMan{public static void main(String[] args){System.out.printlin("姓名:法外狂徒");System.out.printlin("性别:男");System.out.printlin("家庭住址:北…

Java换行输出的5种方式

///可以在格式化输出类型%n来指定输出一行,其效果等同于println ///println()相当于printf( ),即另起一行输出对应的参数后,再进行一次换行

java常识-java怎么换行

文章目录 "\r"和"\n"的区别"\r"和"\n"的由来回车键和输入的"\n"有不同吗? 系统影响java使用换行符的几种方式 “\r"和”\n"的区别 回车 \r 本义是光标重新回到本行开头,r的英文return,控…

使用一片74LS74实现四分频

1.问题 要求使用一片74LS74搭建四分频电路。 2.74LS74介绍 74LS74是一个集成2个D触发器,可以用作寄存器、移位寄存器,分频计数器等。 分频原理 把 U1 的 ~Q1 输出端接到 D1 输入端, 需要分频的信号输入 时钟信号输入端 CLK1,这…

74LS148+74LS47简易病房呼叫系统电路图

设计目的: (1) 设计一个可供至少6个病房呼叫的简易呼叫系统; (2) 掌握数字电路设计与调试方法,熟悉相应集成电路的使用方法。 设计功能: (1)至少能满足来自6个病房的呼叫,为每个病房设置呼叫开关…

multisim仿真 74LS147D芯片

multisim仿真 74LS147D芯片

74HC245

一、74hc245简介 74hc245是兼容TTL器件引脚的高速CMOS总线收发器(bustransceiver),典型的CMOS型三态缓冲门电路,八路信号收发器,。由于单片机或CPU的数据/地址/控制总线端口都有一定的负载能力,如果负载超…

【Multisim仿真】74LS47译码器驱动共阳数码管显示(0-8)数字显示

【Multisim仿真】74LS47译码器驱动共阳数码管显示(0-8)数字显示 Multisim仿真演示 74ls47引脚功能 LT: 试灯输入,是为了检查数码管各段是否能正常发光而设置的。当LT0时,无论输入A3,A2,A1&…