我在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一样进行操作。
使这项工作的正确和重要方法是什么?如何调用特定枚举类型的方法?
如果还有其他更好的方法或任何其他设计模式,那么我愿意接受建议。
答案 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
枚举。