我有一个枚举如下:
public enum ServerTask {
HOOK_BEFORE_ALL_TASKS("Execute"),
COPY_MASTER_AND_SNAPSHOT_TO_HISTORY("Copy master db"),
PROCESS_CHECKIN_QUEUE("Process Check-In Queue"),
...
}
我还有一个字符串(比如string =“Execute”),我想根据它与之匹配的枚举中的字符串,将其作为ServerTask枚举的实例.有没有比在我想要匹配的字符串和枚举中的每个项目之间进行相等性检查更好的方法呢?因为我的枚举很大,所以看起来这会是很多if语句
解决方法:
在某种程度上,你将不得不迭代你拥有的整个枚举集,并且你必须将它们相等 – 通过映射结构(初始填充)或通过基本循环.
通过一个基本的循环很容易完成,所以我没有看到你不想走这条路的任何理由.下面的代码片段假定该字段名为friendlyTask.
public static ServerTask forTaskName(String friendlyTask) {
for (ServerTask serverTask : ServerTask.values()) {
if(serverTask.friendlyTask.equals(friendlyTask)) {
return serverTask;
}
}
return null;
}
这种方法的警告是数据不会在内部存储,并且根据您实际拥有的枚举数量以及您想要调用此方法的次数,它将比使用地图初始化稍差.
但是,这种方法最直接.如果你发现自己处于有几百个枚举的位置(甚至超过20个是我的气味),请考虑这些枚举所代表的内容以及应该做些什么来突破它.
标签:java,enums
来源: https://codeday.me/bug/20190727/1558562.html