日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

在Java 8下更好地利用枚舉

瀏覽:98日期:2022-09-06 11:19:18
.article-entry pre{margin:15px auto;font:12px/20px ’courier new’;border:1px solid #ddd;border-left-width:4px;background:#fbfbfb;padding:10px 15px;}

在我們的云使用分析API中,返回了格式化過的分析數據(這里指生成分析圖)。最近,我們添加了一個特性,允許用戶選擇時間段(最開始只可以按天選擇)。問題是,代碼中每天中的時間段部分高度耦合了……

在Java 8下更好地利用枚舉

例如,下面這段代碼:

private static List<DataPoint> createListWithZerosForTimeInterval(DateTime from,DateTime to,ImmutableSet<Metric<? extends Number>> metrics) {List<DataPoint> points = new ArrayList<>();for (int i = 0; i <= Days.daysBetween(from, to).getDays(); i++) {points.add(new DataPoint().withDatas(createDatasWithZeroValues(metrics)).withDayOfYear(from.withZone(DateTimeZone.UTC).plusDays(i).withTimeAtStartOfDay()));}return points;}

注意:Days、Minutes、Hours、Weeks 和Months一樣出現在代碼的后面部分。這些代碼來自Joda-Time Java時間和日期API。甚至方法的名字都沒有反應出(各自的功能)。這些名字牢牢的綁定到了days的概念上。

我也嘗試過使用不同時間段方式(比如月、周、小時)。但我看到了糟糕的switch/case鬼鬼祟祟地隱藏在代碼里。

你需要知道,switch/case=罪惡 已經深入我心了。在我大學期間的兩段實習經歷中就已經這么認為了。因此,我會不惜任何代價避免使用switch/case。這主要是因為它們違反了開放閉合原則。我深深地相信,遵循這個原則是寫出面向對象代碼的最好實踐。我不是唯一一個這樣想的,Robert C. Martin曾經說:

在很多方面,開放閉合原則是面向對象設計的核心。遵循這個原則會從面向對象技術中收獲巨大的好處,比如可重用性和可維護性1。

我告訴自己:“我們使用Java8或許可以發現一些新的特性來避免swtich/case的危險場面出現”。使用Java8的新 functions(不是那么新,不過你知道我的意思)。我決定使用枚舉代表不同的可得到時間段。

public enum TimePeriod{ MINUTE(Dimension.MINUTE, (from, to) -> Minutes.minutesBetween(from, to).getMinutes() + 1, Minutes::minutes, from -> from.withZone(DateTimeZone.UTC) .withSecondOfMinute(0) .withMillisOfSecond(0)), HOUR(Dimension.HOUR, (from, to) -> Hours.hoursBetween(from, to).getHours() + 1, Hours::hours, from -> from.withZone(DateTimeZone.UTC) .withMinuteOfHour(0) .withSecondOfMinute(0) .withMillisOfSecond(0)), DAY(Dimension.DAY,(from, to) -> Days.daysBetween(from, to).getDays() + 1,Days::days,from -> from.withZone(DateTimeZone.UTC) .withTimeAtStartOfDay()), WEEK(Dimension.WEEK, (from, to) -> Weeks.weeksBetween(from, to).getWeeks() + 1, Weeks::weeks, from -> from.withZone(DateTimeZone.UTC) .withDayOfWeek(1) .withTimeAtStartOfDay()), MONTH(Dimension.MONTH, (from, to) -> Months.monthsBetween(from, to).getMonths() + 1, Months::months, from -> from.withZone(DateTimeZone.UTC) .withDayOfMonth(1) .withTimeAtStartOfDay()); private Dimension<Timestamp> dimension; private BiFunction<DateTime, DateTime, Integer> getNumberOfPoints; private Function<Integer, ReadablePeriod> getPeriodFromNbOfInterval; private Function<DateTime, DateTime> getStartOfInterval; private TimePeriod(Dimension<Timestamp> dimension, BiFunction<DateTime, DateTime, Integer> getNumberOfPoints, Function<Integer, ReadablePeriod> getPeriodFromNbOfInterval, Function<DateTime, DateTime> getStartOfInterval) {this.dimension = dimension;this.getNumberOfPoints = getNumberOfPoints;this.getPeriodFromNbOfInterval = getPeriodFromNbOfInterval;this.getStartOfInterval = getStartOfInterval; } public Dimension<Timestamp> getDimension() {return dimension; } public int getNumberOfPoints(DateTime from, DateTime to) {return getNumberOfPoints.apply(from, to); } public ReadablePeriod getPeriodFromNbOfInterval(int nbOfInterval) {return getPeriodFromNbOfInterval.apply(nbOfInterval); } public DateTime getStartOfInterval(DateTime from) {return getStartOfInterval.apply(from); }}

通過枚舉,我就能夠很容易地修改代碼,允許用戶給圖表數據點指定時間段。

原來是這樣調用:

for (int i = 0; i <= Days.daysBetween(from, to).getDays(); i++)

變成這樣調用:

for (int i = 0; i < timePeriod.getNumberOfPoints(from, to); i++)

支持getGraphDataPoints調用的Usage Analytics服務代碼已經完成了,并且支持時間段。值得一提的是,它考慮了我之前說過的開放閉合原則。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲综合另类| 亚洲不卡视频| 免费日韩av| 欧美日韩视频免费观看| 深夜福利一区| 亚洲欧美日韩国产一区| 国产一区一一区高清不卡| 亚洲一区二区三区无吗| 一区二区小说| 日韩国产激情| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 色网在线免费观看| 精品少妇一区| 加勒比视频一区| 国产精东传媒成人av电影| 欧美一级二区| 国产精品第一| 久久久久久久久成人| 综合亚洲视频| 日韩精品免费一区二区夜夜嗨 | 亚洲三级欧美| 日韩欧美二区| 亚洲精品乱码日韩| 91国内精品| 亚洲成人精选| 亚洲精品国产精品粉嫩| 日韩在线第七页| 午夜精品成人av| 999精品在线| 女人av一区| 国产精品99视频| 日本精品影院| 免播放器亚洲| 免费在线欧美黄色| 国产成人免费精品| 欧美 日韩 国产一区二区在线视频 | 国产视频亚洲| 涩涩涩久久久成人精品| 日韩中文欧美在线| 欧美久久一区二区三区| 日韩激情一区| 免费成人在线观看| 国产精品黄色片| 伊人网在线播放| 亚洲精品中文字幕乱码| 日本aⅴ精品一区二区三区| 国产精品久久久久久久久免费高清| caoporn视频在线| 午夜在线一区| 91欧美国产| 最新国产精品| 久久久久免费av| 国产精品对白| 国产毛片久久| 成人亚洲精品| 日本91福利区| 婷婷成人综合| 久久亚洲人体| 蜜桃成人av| 日本激情一区| 国产麻豆精品久久| 久久国产99| 国产在线|日韩| 久久99精品久久久野外观看| 91成人精品| 伊人久久在线| 国产a亚洲精品| 国产精品久久亚洲不卡| 日本精品一区二区三区在线观看视频| 亚洲小说欧美另类婷婷| 国际精品欧美精品| 日韩黄色av| 午夜欧美精品| 国产一卡不卡| 日韩一区精品视频| 精品欧美一区二区三区在线观看| 亚洲精选久久| 蜜桃久久av一区| 六月婷婷一区| 日韩精品一卡二卡三卡四卡无卡| 影院欧美亚洲| 午夜日韩av| 在线精品视频在线观看高清| 色婷婷色综合| sm捆绑调教国产免费网站在线观看| 国产精品magnet| 国产精品99精品一区二区三区∴| 国产亚洲一区| 欧美日韩精品免费观看视频完整| 人在线成免费视频| 亚洲福利国产| 蜜臀久久久久久久| 日本va欧美va欧美va精品| 日本久久二区| 久久一区视频| 99久久婷婷| 亚洲香蕉久久| 国产欧美一区二区精品久久久 | 日本亚洲不卡| 国产精品videossex| 电影亚洲精品噜噜在线观看| 亚洲一区导航| 精品视频99| 婷婷综合亚洲| 国产亚洲一卡2卡3卡4卡新区| 久久亚洲国产精品尤物| 日本欧美不卡| 国产精品一卡| 亚洲成人日韩| 日韩电影免费在线观看| 国产一级成人av| 亚洲精品九九| 国产视频亚洲| 日韩精品1区| 国产精品久久久久蜜臀| 国产精品一级在线观看| 日韩福利视频导航| 亚洲精品欧美| 免费观看在线色综合| 韩国精品主播一区二区在线观看| 另类激情亚洲| 国产一区久久| 丰满少妇一区| 久久午夜影院| 午夜精品婷婷| 亚洲欧美激情诱惑| 亚洲自啪免费| 久久的色偷偷| 国产精品99久久免费| 久久久久久自在自线| 欧美日韩伊人| 日韩一区二区三区在线免费观看| 欧美日韩高清| 欧美日韩1区| 神马午夜在线视频| 中文亚洲免费| 国产精品久久亚洲不卡| 久久亚洲在线| 日韩精品高清不卡| 成人羞羞在线观看网站| 西西人体一区二区| 成人在线视频免费| 久久午夜视频| 青青伊人久久| 婷婷成人在线| 国产亚洲一区二区三区啪| 超级白嫩亚洲国产第一| 日韩一区二区三区免费| 亚洲性视频在线| 国产一卡不卡| 一本大道色婷婷在线| 999国产精品| 国产伊人久久| 日本中文字幕视频一区| | 91亚洲人成网污www| 国产一级一区二区| 69精品国产久热在线观看| 97人人精品| 国产精品中文字幕亚洲欧美| 天堂va欧美ⅴa亚洲va一国产| 久久久精品五月天| yellow在线观看网址| 国产亚洲一区| 伊人久久一区| 美国欧美日韩国产在线播放| 日韩精品网站| 日韩一区二区中文| av日韩中文| 蜜桃久久久久久| 日韩成人综合| 极品av在线| 欧美a级一区二区| 欧美亚洲三级| 欧美一级网址| 国产另类在线| 亚洲精品婷婷| 男人的天堂亚洲一区| 亚洲欧美视频一区二区三区| 午夜久久tv| 日韩精品一二区| 亚洲精品高潮| 一区二区国产在线| 国产福利一区二区三区在线播放| 国产探花在线精品一区二区| 日本欧美在线| 尹人成人综合网| 国产精品一二| 国产精品分类| 日韩高清不卡| 国产精品视区| 日韩av一区二| 欧美黑人做爰爽爽爽| 日韩在线精品| 欧美特黄视频| 亚洲精品大片| a国产在线视频| 日韩成人亚洲| 亚洲免费一区三区| 精品中文字幕一区二区三区四区|