我们有一个 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/