查找Java枚举的最佳实践
我们有一个REST API,客户端可以在其中提供表示Java Enums中服务器上定义的值的参数。
因此,我们可以提供一个描述性错误,我们将此valueOf(..)方法添加到每个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中提供一个更具描述性的错误。
Marcus Leon asked 2020-08-02T10:08:59Z
10个解决方案
34 votes
可能可以实现通用的静态lookup方法。
像这样
public class LookupUtil {
public static > E lookup(Class 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);
}