查找Java枚举的最佳实践

发布于 2021-01-29 19:47:46

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

因此,我们可以提供一个描述性错误,我们将此lookup方法添加到每个Enum中。似乎我们只是在复制代码(错误)。有更好的做法吗?

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(..)No enum const class a.b.c.MyEnum.BadValue。我想提供一个来自API的更具描述性的错误。

关注者
0
被浏览
104
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    可能可以实现通用静态lookup方法。

    像这样

    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);
       }
    }
    

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



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看