Java中的魔法值问题

news/2024/11/7 21:26:24/

一、什么是魔法值

魔法值,也叫做魔法数值、魔法数字,通常是指在代码编写时莫名出现的数字,无法直接判断数值代表的含义,必须通过联系代码上下文分析才可以明白,严重降低了代码的可读性。除数字之外,代码中作为key值的常量字符串也被认为是魔法值,尽管其表示含义比数值较为清晰,但是仍然会产生不规范问题。

//例如
if(flag=='4'){...
}

这个4在运行的时候不会报错,但在代码阅读时很难判断他所代表的含义

二、魔法值的影响

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

三、解决办法

1、定义静态常量

在当前类中使用或在方法内部使用的值, 可以通过定义静态常量的方式来避免魔法值的出现。

public final static Integer ENABLE=0;
public final static Integer DISABLE=1;

2、接口中定义

接口中定义,继承这个接口的实现类都可以使用这些常量。

public interface UserService{public final static Integer ENABLE=0;public final static Integer 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())

http://www.ppmy.cn/news/768920.html

相关文章

好文推荐(持续更新)

MySQL索引背后的数据结构及算法原理为什么别人能用好 MySQL?万字详解其复杂原理select、poll、epoll之间的区别Redis AOF原理redis的持久化方式RDB和AOF的区别Linux的虚拟内存详解(MMU、页表结构)Java 永久代去哪儿了

第六届云安全联盟大中华区大会:数字技术引领数字安全生态建设,成功举办!

第六届云安全联盟大中华区大会:数字技术引领数字安全生态建设,成功举办! 更多大会详情可微信搜索“国际云安全联盟公众号” 2023年4月13日,第六届云安全联盟大中华区大会(The 6th CSA GCR Congress)在上海…

像西方知识分子那样登场

像西方知识分子那样登场 文/鸿帆 http://blog.sina.com.cn/u/4b8bd145010008e4  一方面,一个可供知识分子振臂高呼的传媒舞台已经搭好;另一方面,知识饥渴、精神饥渴的观众也已就座。现在,就剩下请大陆知识分子—— 大陆这些年被…

SEO前景到底如何 大家共同来讨论~

当有数的 SEO培训 机构,接踵打着SEO培训火热报名的推广时,咱们不禁扪心自问,SEO真的会那末火吗?SEO远景到底如何?大家一起来探究讨论吧。当百度有数次的斡旋排名算法,当百度推出它的所谓"凤巢";当google外链愈来愈难…

Thread类的run()和start()方法

文章目录 1. 调用Thread类的start()方法后能否再调用start()方法?2. run()和start()方法的区别?3. 由问题2引出,是run()方法中的代码先执行还是当前线程中的代码先执行? 今天同学去面试时遇到了一个问题:一个线程在调用…

独占锁ReentrantLock原理解析

文章目录 1 基本介绍1.1 为什么要使用ReentrantLock1.2 ReentrantLock的常用方法 2 源码梳理2.1 构造方法2.2 加锁2.3 释放锁 参考 1 基本介绍 ReentrantLock是可重入独占锁,同时只能由一个线程锁持有,如果其他线程想要获取锁,就会被阻塞并放…

Java线程池:基本介绍、源码梳理、注意点

文章目录 1 基本介绍1.1 为什么使用线程池1.2 一个简单的例子1.3 线程池实现类:以ThreadPoolExecutor为例1.3.1 ThreadPoolExecutor的构造方法1.3.2 常用的阻塞队列:1.3.3 常用的拒绝策略:1.3.2 ThreadPoolExecutor的工作模型 1.4 线程池的种…

RabbitMQ学习(二):客户端开发

文章目录 1 直接上代码吧1.1 maven1.2 配置类1.3 生产者测试代码1.4 生产者运行结果1.5 消费者测试代码1.6 消费者运行结果 参考 1 直接上代码吧 本篇文章主要展示一个客户端开发Demo。 1.1 maven maven中需要的配置是直接从官网拷贝的。 <dependency><groupId>…