java - 测试 String 属于常量子集的正确方法 (Java)

标签 java string enums subset

目标:

  • 表示从抽象类中定义的字符串创建的字符串子集
  • 测试输入的字符串是否属于给定子集

初始解决方案:

让我们列出可能发生的事件。

/**
* 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,并且仅对这些事件允许执行某些操作。目标是 make 方法 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)enum - 创建字符串枚举

  • 输入枚举: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 属于定义的子集

最佳答案

像这样怎么样?

    private boolean isEventAllowed(String eventKey) {
      return Arrays.asList(KEY_EVENT_1, KEY_EVENT_3, KEY_EVENT_5).contains(eventKey);
    }

按照 John Fergus 的评论,可以通过使用如下内容来提高可读性:

    private static List<String> SUBSET = Arrays.asList(KEY_EVENT_1, KEY_EVENT_3, KEY_EVENT_5);

    private boolean isEventAllowed(String eventKey) {
      return SUBSET.contains(eventKey);
    }

关于java - 测试 String 属于常量子集的正确方法 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39209565/

相关文章:

java - 在自动完成 TextView 中获取后退空格按钮单击操作事件

c++ - 如何修复 'No matching function for call to ' strtok''

Java 将键码转换为字符串或字符

c# - 如何在 ModelView 中防止 WPF 枚举

java - 任意 Java 枚举参数

java - 无法在 Apache ServiceMix 中启动 OSGI bundle

c# - 方法设计——清晰或多功能

检查一个字符串是否是另一个字符串的子字符串

vb.net - 将可选 Enum 传递给 VB.NET 中的函数

java - 如何在自定义 JPanel 中移动 Sprite ?