Java中的魔法值及其解决办法

什么是魔法值

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

影响

魔法值会使得代码的可读性下降。并且如果数值出现多次不能够明确说明这些数值的含义,在使用数值的时候也容易出现错误。

代码举例
//定义array数组
int [] array = new int[24];

//遍历array数组输出值
for (int i =0; i < 24; i++){
	System.out.print(array[i]);
}

像上述的代码,如果定义数组部分的代码和for循环输出array数组代码相隔比较远,就很难知道for循环中的 i < 20是什么含义了。它究竟是数组的长度还是根据需求定义的界限值,很难搞清楚。

解决办法

根据魔法值的定义我们可以知道,魔法值其实就是“共识层面”的常量,而常量的使用范围经常是全类甚至是全局的,所以如果命名不合适就会出现阅读困难的问题,也就是魔法值,所以如果我们可以限制使用的范围,或者用一些标志性的常量来代替数值,那么问题就会很好的解决了。

使用static final 定义常量(不推荐)

如下代码修改:

//定义常量
static final int arrayLength= 24;

//定义array数组
int [] array = new int[arrayLength];

//遍历array数组输出值
for (int i =0; i < arrayLength; i++){
	System.out.print(array[i]);
}

上边的代码将常量值用static final定义成变量,后边的for循环在使用这个常量的时候只需要将其替换成变量名即可,做出了很好的区分,以后只要是这个变量名,它的数值就是我们的常量值,也就是24。
同样,使用static final 声明常量,还可以方便以后的维护更新,修改变量的值只需要修改一处就可以了,不用担心出其他的错误:比如修改了不应该修改的地方

使用枚举类
//定义枚举类
public enum ArrayLengthEnum{

	private int arrayLength;
	
	ArrayLengthEnum(int arrayLength){
		this.arrayLength = arrayLength;
	}
	
	public int getArrayLength(){
		return arrayLength;
	}
}

//定义array数组
int [] array = new int[ArrayLengthEnum(24).getArrayLength];

//遍历array数组输出值
for (int i =0; i < ArrayLengthEnum(24).getArrayLength; i++){
	System.out.print(array[i]);
}

纠正魔法值带来的好处

1、望文生义,看到这个变量名就知道他的值是多少
2、常量值在后期的使用是能够做到值出同源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

new_repo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值