【发布时间】:2016-08-29 15:10:30
【问题描述】:
目标:
- 表示从抽象类中定义的字符串创建的字符串子集
- 测试输入字符串是否属于给定子集
初步解决方案:
让我们列出可能的事件。
/**
* List of events.
*/
public abstract class EventKeys {
public static final String KEY_EVENT_1 = "EVENT_1";
public static final String KEY_EVENT_2 = "EVENT_2";
public static final String KEY_EVENT_3 = "EVENT_3";
public static final String KEY_EVENT_4 = "EVENT_4";
public static final String KEY_EVENT_5 = "EVENT_5";
public static final String KEY_EVENT_6 = "EVENT_6";
public static final String KEY_EVENT_7 = "EVENT_7";
//etc ..
}
我想制作这些事件的子集,例如事件 1、3、5,并且仅对这些事件允许一些操作。目标是使方法 boolean isEventAllowed(String eventKey) 说明事件是否属于允许事件的子集。
真正天真的方法是:
/**
* Allow only events 1,3,5
*/
private isEventAllowed(String eventKey) {
if(eventKey.equals(EventKeys1.KEY_EVENT_1)) {
return true;
} else if(eventKey.equals(EventKeys1.KEY_EVENT_3)) {
return true;
} else if(eventKey.equals(EventKeys1.KEY_EVENT_3)) {
return true;
} else {
return false;
}
}
我觉得这种方法不是很方便。我需要更好的方法来表示字符串的子集并提供输入字符串是否属于定义的子集的操作?
其他可能的解决方案:
作为其他选项,我正在考虑其他两个选项,但我仍然不确定它是否是这样做的好方法。
1)枚举 - 创建字符串枚举
- 输入枚举:EventKeys1.KEY_EVENT_1, EventKeys1.KEY_EVENT_2, EventKeys1.KEY_EVENT_3
- 测试 String keyEvent 是否属于定义的枚举?
2) 列出
- 创建列表
List<String> subset并放在那里 EventKeys1.KEY_EVENT_1、EventKeys1.KEY_EVENT_2、EventKeys1.KEY_EVENT_3 - 测试String keyEvent是否属于列表子集
请在回答前阅读此内容:
- 给定类 EventKeys,无法更改,主要选项集
- 我需要以某种方式表示子集
- 我需要更好地实现方法 isAllowedEvent(String keyEvent) 的建议,如果输入字符串则返回 true 属于定义的子集
【问题讨论】:
-
考虑使用
java.util.Set(例如,java.util.HashSet、java.util.TreeSet、...) -
@B.Kemmer 目前在代码中,稍后可能来自某些配置文件,无论如何都会以某种方式映射到 KeyEvent 抽象类。用例是在抽象类中的事件上完成了一些动作,我只需要对某些事件执行一些其他动作,并且需要以某种方式表示子集。根据 cmets 最合适的可能是 HashSet + contains(eventKey) 它清晰且易于定制,并且肯定比 if/else if 解决方案更好
-
@jameslarge 感谢提示 HashSet 可能是我想要的