首页 > 其他分享 >魔法值问题

魔法值问题

时间:2023-07-06 21:11:06浏览次数:40  
标签:ENABLE 魔法值 常量 final 问题 static public

一、什么是魔法值

魔法值,也叫做魔法数值、魔法数字,通常是指在代码编写时莫名出现的数字,无法直接判断数值代表的含义,必须通过联系代码上下文分析才可以明白,严重降低了代码的可读性。除数字之外,代码中作为key值的常量字符串也被认为是魔法值,尽管其表示含义比数值较为清晰,但是仍然会产生不规范问题。
//例如
if(flag=='3'){
    ...
}
这个3在运行的时候不会报错,但在代码阅读时很难判断他所代表的含义  

二、魔法值的影响

  1. 使代码的可读性下降
  2. 不规范的数值使用,可能会导致多出不同意,当进行修改时会带来很大的工作量
  3. 作为key值的常量字符串会出现拼写错误的现象,key无法命中value,导致数据异常或缓存无法命中
 

三、解决办法

1、定义静态常量

在当前类中使用或在方法内部使用的值, 可以通过定义静态常量的方式来避免魔法值的出现。
public final static ENABLE=0;
public final static DISABLE=1;

2、接口中定义

接口中定义,继承这个接口的实现类都可以使用这些常量。
public interface UserService{
    public final static ENABLE=0;
    public final static DISABLE=1;
}

3、使用枚举

@Getter
@AllArgsConstructor
public enum DemoEnums {

    ENABLE(0, "开启"),
    DISABLE(1, "关闭");

    /**
     * 状态值
     */
    private final Integer code;
    /**
     * 状态名
     */
    private final String name;
}
使用
user.setStatus(DemoEnums.ENABLE.value())
 

标签:ENABLE,魔法值,常量,final,问题,static,public
From: https://www.cnblogs.com/nliu/p/17533350.html

相关文章

  • 【vue-问题】vue : 无法加载文件 D:\Program Files\nodejs\node_global\vue.ps1,因
    【vue-问题】vue:无法加载文件D:\ProgramFiles\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。解决方法:①:管理员方式运行PowerShell,输入get-ExecutionPolicy。如果它回复Restricted,表示是禁止的②:输入:set-ExecutionPolicyRemoteSigned③:输入Y(也有可能不会询问,直......
  • 记powerjob依赖的netty版本问题
    1.在使用powerjob的时候,启动项目有报netty相关ClassNotFoundException的问题<dependency><groupId>tech.powerjob</groupId><artifactId>powerjob-client</artifactId><version>4.3.1</version>......
  • 动态规划 01背包问题 二维转一维过程及理解
     1. 01背包:二维朴素写法 publicstaticintgetMaxValue(int[]weight,int[]values,intw){intn=weight.length;int[][]dp=newint[n+1][w+1];for(inti=1;i<=n;i++){for(intj=1;j<=w;j++){if(j>=we......
  • 记@ConditionalOnMissingBean注解导致bean注入失败的问题
    1.背景springboot项目,引入nacos做配置中心,pom.yaml导入依赖<dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>0.2.12</ver......
  • 1.安装Rocky8.8 Ubuntu20.04版本中遇到的一些问题
    1.VMware的监视器看不到Rocky的全部图像,所以我在安装过程中改变了监视器的最大分辨率,这样不会影响系统的功能吧?2.Ubuntu系统安装中Instalcomplete界面中有个rooting运行中,我直接关机,又开机,影响不影响系统完整?3.在VMware中Ubuntu系统root登录的密码与XShell中Ubuntu系统root登录......
  • 实习中遇到的问题(3)
    np格式的数组在展示图片时需要设置的格式转换。如果是(1,28,28)格式,则不可以转换成图片展示 如果是(28,28,1)格式,则可以转换成图片展示 同时,(1,28,28,1)也是不能够展示的。我想有可能是最后一个数字是channel即通道数。关于np.newaxis()函数np.newaxis的功能是增加新的维度......
  • 其实MyBatis的插件机制可以帮我们解决工作很多问题,建议收藏
    MyBatis插件插件是一种常见的扩展方式,大多数开源框架也都支持用户通过添加自定义插件的方式来扩展或者改变原有的功能,MyBatis中也提供的有插件,虽然叫插件,但是实际上是通过拦截器(Interceptor)实现的,在MyBatis的插件模块中涉及到责任链模式和JDK动态代理,这两种设计模式的技术知识也......
  • 「NOIP 模拟赛 20230705」序列删数问题
    summarizationsolution首先发现,范围小的工具在删除某一数字时将更大数字包括进来的可能性越小,可以删除的数更多,所以在删除某一数字时应该尽可能选择范围较大的工具。接下来我们考虑可删数(要删除的数)删除的顺序:考虑要删掉每个数所允许的最大的工具的区间长度。现在假设有两个......
  • UE5打包SDK未正确安装的问题
    正文Windows(笔者之前用的电脑是windows10,最新电脑使用的是windows11)下UE5打包项目的需要安装VisualStudio。而且安装的时候需要选择上C++游戏开发相关模块。如下图所示:有时候安装了VisualStudio之后,还是不能打包:可以看到并没有识别到SDK,这个时候。首先在VisualStudio......
  • elementplus el-table 多级表头固定列的问题
    问题:最近有个需求,就是对复杂结构的el-table多级表头表格进行固定列(固定左侧),然后百度了N中方案都没有解决,全都是elementui多级表头固定列(elementui还是有解决方案的,自行百度,我这里说的是elementplus),开始我写了各种demo,但是始终无效,我看了下我的elementplus版本为2.2.0 然......