处理实现公共接口的枚举(迭代,反序列化)

时间:2011-11-18 02:17:47

标签: java interface enums enumset

我有一个Android应用程序,可以从Web源加载数据并显示它。我组织了每个API方法,这些源代码支持在每个源分割的枚举常量中。比方说,SourceA提供体育和天气数据,SourceB提供股票和新闻数据。

public enum ServiceA implements ServiceMethod {
    GET_SPORT(...) {...}, 
    GET_WEATHER(...) {...};
    ...
}

public enum ServiceB implements ServiceMethod {
    GET_STOCK(...) {...}, 
    GET_NEWS(...) {...};
    ...
}

每个枚举类还有私有成员来处理服务API(不同的API用于不同的源)

变量ServiceMethod

ServiceMethod method;
... // initializing
String cleanAndFancyData = method.queryData(); // e.g.

不需要存储用户历史记录,因此我必须序列化和反序列化ServiceMethod变量,并枚举实现此接口的所有枚举中的所有常量。序列化看起来很简单,是不可能的。

现在我只需手动迭代枚举:

Collection<ServiceMethod> allMethods = new ArrayList<ServiceMethod>();
allMethods.addAll(EnumSet.allOf(ServiceA.class));
allMethods.addAll(EnumSet.allOf(ServiceB.class));

这有更清洁,更好的方法吗?或者我的做法完全错了? 另外,还有什么方法可以确保所有ServiceMethod都有唯一的名称(在所有枚举中)?

1 个答案:

答案 0 :(得分:1)

您可以使用strategy patternServiceAServiceB合并为一个Service