如何根据传递的类型调用枚举方法?

时间:2016-12-12 02:20:30

标签: java oop design-patterns enums

我在Enum下方,如下所示,我需要根据它的事件类型调用其适当的方法基础。

"EventA"

问题:

例如:如果我获得execute,那么我想将其称为"EventB"方法。同样,如果我得到execute,那么我想将其称为execute方法,依此类推。现在由于明显的原因它无法正常工作,因为它无法在同一个枚举中找到String eventType = String.valueOf(payload.get("eventType")); String eventMapHolder = String.valueOf(payload.get("eventMapHolder")); // this below line gives compilation error as it is not able to find execute method. Map<String, Map<String, String>> processedMap = EventType.valueOf(eventType).execute(eventMapHolder); 方法。

"EventA"

我需要根据传递的事件类型执行某些操作。

  • 如果eventMapHolder被传递,那么首先我将itemId字符串转换为Map(让我们称之为持有者),然后从该持有人地图中提取itemId,然后我传递{{ 1}}到getClientInfo方法,后者又返回一个Map(让我们调用这个clientInfoHolder)。然后我将clientInfoHolder地图中的所有内容放入holder地图,最后根据holder及其密钥返回另一张地图。
  • 如果"EventB"被传递,那么首先我将eventMapHolder字符串转换为Map(让我们称之为持有者),然后在holder地图上创建一个新的不可变地图基础及其键并返回该地图。

一般来说,我会在同一个枚举类中有更多的事件类型,并且他们大多数会像EventA和EventB一样进行操作。

使这项工作的正确和重要方法是什么?如何调用特定枚举类型的方法?

如果还有其他更好的方法或任何其他设计模式,那么我愿意接受建议。

1 个答案:

答案 0 :(得分:5)

您可以在enum上定义抽象方法,只要在每个枚举实例中覆盖该方法即可。这是一个简单的例子:

public enum EnumWithMethod {

  VALUE_A {
    @Override
    public String enumMethod(String s) {
      return s + "-A";
    }
  },
  VALUE_B{
    @Override
    public String enumMethod(String s) {
      return s + "-B";
    }
  };

  public abstract String enumMethod(String s);

}

因此,给定一个任意的Enum实例,您可以调用enumMethod

EnumWithMethod e = EnumWithMethod.VALUE_A;
String str = e.enumMethod("asdf"); //asdf-A

对于您的示例,这就像添加

一样简单
public abstract Map<String, Map<String, String>> execute(String eventMapHolder);

EventType枚举。