Java 中 Enum 的一种使用 – 热爱改变生活
我的GitHub GitHub |     登录
  • If you can't fly, then run; if you can't run, then walk; if you can't walk, then crawl
  • but whatever you do, you have to keep moving forward。
  • “你骗得了我有什么用,这是你自己的人生”
  • 曾有伤心之地,入梦如听 此歌

Java 中 Enum 的一种使用

Java sinvader 3893℃ 0评论

需求

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

定义了 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 的一种使用

喜欢 (0)
发表我的评论
取消评论
表情

如需邮件形式接收回复,请注册登录

Hi,你需要填写昵称和邮箱~

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址