java8 枚举_在Java 8下更好地利用枚举

原标题:在Java 8下更好地利用枚举

在我们的云使用分析API中,返回了格式化过的分析数据(这里指生成分析图)。最近,我们添加了一个特性,允许用户选择时间段(最开始只可以按天选择)。问题是,代码中每天中的时间段部分高度耦合了……

362939e6d7a30367a4048bf02dc7d8a6.png

例如,下面这段代码:

0ee5b7fc7b27f74cd5fad807cbea8c71.png

注意:Days、Minutes、Hours、Weeks 和Months一样出现在代码的后面部分。这些代码来自。甚至方法的名字都没有反应出(各自的功能)。这些名字牢牢的绑定到了days的概念上。

我也尝试过使用不同时间段方式(比如月、周、小时)。但我看到了糟糕的switch/case鬼鬼祟祟地隐藏在代码里。

你需要知道,switch/case=罪恶已经深入我心了。在我大学期间的两段实习经历中就已经这么认为了。因此,我会不惜任何代价避免使用switch/case。这主要是因为它们违反了开放闭合原则。我深深地相信,遵循这个原则是写出面向对象代码的最好实践。我不是唯一一个这样想的,Robert C. Martin曾经说:

在很多方面,开放闭合原则是面向对象设计的核心。遵循这个原则会从面向对象技术中收获巨大的好处,比如可重用性和可维护性。

我告诉自己:“我们使用Java8或许可以发现一些新的特性来避免swtich/case的危险场面出现”。使用Java8的新functions(不是那么新,不过你知道我的意思)。我决定使用枚举代表不同的可得到时间段。

c08cd43c0a689ff8e6145e1bf9a250e4.png

c8df2bed4ac59741620e41972bd4f960.png

7788eb08ffc889639181843ee83aaca2.png

通过枚举,我就能够很容易地修改代码,允许用户给图表数据点指定时间段。

原来是这样调用:

变成这样调用:

支持getGraphDataPoints调用的Usage Analytics服务代码已经完成了,并且支持时间段。值得一提的是,它考虑了我之前说过的

开放闭合原则。

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值