Java 魔法值处理方案
魔法值的定义
方法一 静态常量(不推荐)
方法二 接口中定义
方法三 定义在实体类
方法四 使用枚举类 enum
总结
魔法值的定义
魔法值是Java中突兀出现在代码中的常量,比如
if(user.status==2){
.....
}
这段代码里面的2就是一个魔法值,这样的数据会使得代码难以理解,并且如果这个2用的地方很多,以后想要更改也很麻烦还容易遗漏,所以就需要规范一下对魔法值的处理。
方法一 静态常量(不推荐)
public final static STATUS_FALSE=0;
public final static STATUS_TRUE=1;
直接在类中定义一个常量,这种方法对于魔法值的使用范围只在一个类的范围内的情况下比较方便,哦,对了。常量的命名一般都是大写。
方法二 接口中定义
public interface UserService{
public final static STATUS_FALSE=0;
public final static STATUS_TRUE=1;
}
写在接口中的话好处就是,继承这个接口的实现类都可以使用这些常量。
方法三 定义在实体类
public class user{
private String name;
private Integer status;
public final static STATUS_FALSE=0;
public final static STATUS_TRUE=1;
}
这样写是比较推荐的,你可以在任意想用的地方使用类名打点的方式使用这些常量。如果要写的常量比较多也可以直接建一个专门用来存放静态常量的类。
方法四 使用枚举类 enum
枚举类是一种比较特殊的类想了解的可以去搜搜我这边只举个简单的使用例子。
public enum CarAssetsEnum {
DELETE_FALSEE(0,"已删除"),
DELETE_TRUE(1,"未删除");
private final Integer value;
private final String description;
CarAssetsEnum(Integer value,String description){
this.value=value;
this.description=description;
}
public Integer value(){
return this.value;
}
public String description(){
return this.description;
}
}
在使用的时候就可以直接这样使用
user.setStatus(CarAssetsEnum.DELETE_FALSEE.value())
总结
虽然使用魔法值也不会报错,但是维护和阅读成本过高,还是遵循规范不使用魔法值比较好