Java中Enum的一种使用

无简介

需求

不知道各位在写代码的时候有没有遇到这样的问题:

定义了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;
}

}

-------------本文结束  感谢您的阅读-------------
下次一定