java - 查找 Java 枚举的最佳实践

标签 java enums

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

所以我们可以提供一个描述性错误,我们将这个 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 中提供一个更具描述性的错误。

最佳答案

或许你可以实现通用静态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);
   }
}

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

关于java - 查找 Java 枚举的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2418729/

相关文章:

java - 当枚举被声明为通用参数时获取枚举的 values()

java - 使用字符串数组声明 java 枚举

java - 如何在java中将文本添加到文本文件?

java - stax - 获取 xml 节点作为字符串

java - Ibatis queryWithRowHandler() 似乎仍然获取所有行

具有关联值的 Swift 枚举,在调用中得到 "missing argument label ' 数组”

java - 递归解释

java - 如何将本地 .jar 文件依赖项添加到 build.gradle 文件?

enums - Rust 中逻辑上但非法的未初始化变量

typescript - 在字符串值成员中使用枚举