加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:29:20 所属栏目:Java 来源:网络整理
导读:我有一个 Android应用程序,可以从Web源加载数据并显示它.我组织了每个API方法,这些源代码支持在每个源分割的枚举常量中.比方说,SourceA提供体育和天气数据,SourceB提供股票和新闻数据. public enum ServiceA implements ServiceMethod { GET_SPORT(...) {...
我有一个 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都具有唯一的名称(跨所有枚举)?

解决方法

您可以使用 strategy pattern将ServiceA和ServiceB组合到一个服务中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读