需求
不知道各位在写代码的时候有没有遇到这样的问题:
定义了 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; } }
转载请注明:热爱改变生活.cn » Java 中 Enum 的一种使用
本博客只要没有注明“转”,那么均为原创。 转载请注明链接:sumile.cn » Java 中 Enum 的一种使用