查找Java Enum的最佳实践 [英] Best practice to look up Java Enum

查看:131
本文介绍了查找Java Enum的最佳实践的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们有一个REST API,客户端可以在Java Enums中提供表示服务器上定义的值的参数。

We have a REST API where clients can supply parameters representing values defined on the server in Java Enums.

因此我们可以提供描述性错误,我们添加此<每个枚举的code> lookup 方法。好像我们只是在复制代码(糟糕)。有更好的做法吗?

So we can provide a descriptive error, we add this lookup method to each Enum. Seems like we're just copying code (bad). Is there a better practice?

public enum MyEnum {
    A, B, C, D;

    public static MyEnum lookup(String id) {
        try {
            return MyEnum.valueOf(id);
        } catch (IllegalArgumentException e) {
            throw new RuntimeException("Invalid value for my enum blah blah: " + id);
        }
    }
}

更新 valueOf(..)提供的默认错误消息为无枚举const类abcMyEnum.BadValue 。我想从API中提供更具描述性的错误。

Update: The default error message provided by valueOf(..) would be No enum const class a.b.c.MyEnum.BadValue. I would like to provide a more descriptive error from the API.

推荐答案

可能你可以实现通用的静态查找方法。

Probably you can implement generic static lookup method.

像这样

public class LookupUtil {
   public static <E extends Enum<E>> E lookup(Class<E> e, String id) {   
      try {          
         E result = Enum.valueOf(e, id);
      } catch (IllegalArgumentException e) {
         // log error or something here

         throw new RuntimeException(
           "Invalid value for enum " + e.getSimpleName() + ": " + id);
      }

      return result;
   }
}

然后你可以

public enum MyEnum {
   static public MyEnum lookup(String id) {
       return LookupUtil.lookup(MyEnum.class, id);
   }
}

或显式调用实用程序类查找方法。

or call explicitly utility class lookup method.

这篇关于查找Java Enum的最佳实践的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆