无简介
需求
不知道各位在写代码的时候有没有遇到这样的问题:
定义了Constant,里面写了一些常量,如果要控制台输入一个错误的话,那么使用
String Constant.NETWORK_ERROR=“network_error”;
String Constant.INIT_ERROR=“init_error”;
然后我们定义好了完整的Constant或者使用SVN的话我们可以让其他人不能修改Constant文件,我们希望其他程序员能够尽量使用Constant,将常量定义在里面。
现在假设我们写了这么一个方法作为公用方法,这个方法的使命是输出错误信息。
private void print(String message){
System.out.println(message);
}
我们假设错误的信息就两种,一种是网络错误:Constant.NETWORK_ERROR,另一种时候是初始化错误:Constant.INIT_ERROR
也就是说,我们希望从print方法中输出的只是这么两种错误的信息。
但是!
看到但是,我们就知道问题来了:
总有一些人,新手也好,懒人也罢,不使用Constant。
我们再假设,这个人即是一个新手,也是一个懒人,他开始还很听你的话,安安分分的写Constant.NETWORK_ERROR,后来开始嫌写的太长了,于是开始使用network_error,这时候你是看不出的,因为他手写的是对的,有一次,他写的时候不小心写错了,于是,通过你的print方法,显示出来了一个错误的消息,而这时候,你还在想,我没有在Constant类里面去定义这个啊!它是怎么出来的!
解决方法
我们的目标是!
没有蛀牙!
咳咳~目标是让新人在使用我们的print方法的时候,按照我们的方法来做。
之前因为我们传入的参数是String类型的,所以不管是谁,只要构造一个String,就可以调用。
所以我们可以自己定义一个类型。
现在我们这样来写print
private static void print(ErrorCode str) {
}
这里传入了一个ErrorCode类型的参数进去
public enum ErrorCode {
NETWORK_ERROR(“network_error”),INIT_ERROR(“init_error”);
ErrorCode(String r) {
}
}
上面就是ErrorCode,我们看到在平常应该写class的地方,被替换成了enum。
在这个类中,它有两个成员,就是NETWORK_ERROR以及INIT_ERROR
他们在定义的时候就已经被初始化了他们分别的值
这样,我们如果在调用print的时候,就必须传递ErrorCode类型的值,而这个类中两个成员,都是他的值,于是,目标初步实现了。
获得enum的值,而不是他的名称
当你这样完成了你的代码之后,你会发现你打印出的不是你想要的init_error,而是INIT_ERROR
WTF!
别激动,我们来对上面的代码做一些事情,我直接上完整的代码了:
public class MainClass {
public static void main(String[] args) {
print(ErrorCode.INIT_ERROR);
}
private static void print(ErrorCode str) {
System.out.println(str.getValue());
}
}
public enum ErrorCode {
NETWORK_ERROR(“network_error”),INIT_ERROR(“init_error”);
private String mErrorCode;
ErrorCode(String r) {
mErrorCode = r;
}
public String getValue() {
return this.mErrorCode;
}
}