问题描述
我们有一个REST API,客户端可以在Java Enums中提供表示服务器上定义的值的参数。
We have a REST API where clients can supply parameters representing values defined on the server in Java Enums.
因此我们可以提供描述性错误,我们添加此 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的最佳实践的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!