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]);
}

你可能感兴趣的:(java,java)