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

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

在Java 8下更好地利用枚舉

瀏覽:93日期: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| 少妇精品久久久一区二区三区| 国产精品日本| 久久亚洲视频| 三级在线观看一区二区| 伊人久久大香伊蕉在人线观看热v| 午夜久久黄色| 免费成人在线影院| 日本v片在线高清不卡在线观看| 黑丝一区二区| 丝袜诱惑制服诱惑色一区在线观看| 欧美日韩国产一区二区三区不卡| 五月天综合网站| 91成人精品视频| 亚洲综合三区| 日韩av不卡在线观看| 国产精品极品| 国产suv精品一区| 999国产精品永久免费视频app| 欧美1级日本1级| 综合亚洲自拍| 国产精品啊啊啊| 激情黄产视频在线免费观看| 欧美日韩精品免费观看视欧美高清免费大片| 精品视频在线观看网站| 蜜桃av.网站在线观看| 欧美+日本+国产+在线a∨观看| 久久精品不卡| 免费人成在线不卡| 亚洲国产综合在线看不卡| 国产日韩一区二区三免费高清| 国产91精品对白在线播放| 999精品色在线播放| 亚洲天堂日韩在线| 亚洲精品**中文毛片| 亚洲综合专区| 日本精品在线中文字幕| 欧美私人啪啪vps| 国精品一区二区三区| 综合一区二区三区| 99精品国产一区二区三区| 欧美自拍一区| 久久久久久一区二区| 亚洲v在线看| 成人va天堂| 久久不见久久见免费视频7 | 成人在线视频区| 亚洲国产一区二区在线观看 | 日韩视频一区二区三区在线播放免费观看| 老司机久久99久久精品播放免费| 丝瓜av网站精品一区二区| 国产精品亚洲片在线播放| 久久精品欧美一区| 欧美三级第一页| 亚洲调教视频在线观看| 欧美一区=区三区| 欧美日韩国产在线观看网站| 国产欧美日韩亚洲一区二区三区| 欧美不卡在线| 久久不见久久见中文字幕免费| 婷婷国产精品| 欧美激情 亚洲a∨综合| 亚洲经典在线| 久久影院资源站| 美女国产精品| 成人午夜毛片| 日韩精品一区二区三区中文字幕| av最新在线| 日韩不卡手机在线v区| 久久久久国产一区二区| 国产九九精品| 天堂成人免费av电影一区| 亚洲黄色中文字幕| 日韩av中文字幕一区二区| 久久久久欧美精品| 欧美激情三区| 亚洲三级视频| 欧美日韩国产免费观看视频| 精品99在线| 日韩区一区二| 日韩在线免费| 国产精品中文| 亚洲资源网站| 美女久久久久| 日韩欧美1区| 麻豆国产欧美一区二区三区 | 视频一区二区中文字幕| 少妇精品导航| 成人午夜在线| 国产精品美女午夜爽爽| 伊人久久一区| 中文亚洲免费| 亚洲网站视频| 日本精品不卡| 国产一区二区三区精品在线观看| 日韩精品乱码av一区二区| 国产精品社区| 欧美久久精品一级c片| 国产欧洲在线| 精品视频网站| 国产精品.xx视频.xxtv| 日韩高清欧美激情| 亚洲欧美专区| 免费精品视频在线| 日韩精品一卡二卡三卡四卡无卡| 国产一区观看| 国产在线成人| 欧美成人亚洲| 欧美中文一区二区| 日韩精品一区二区三区免费观看| 国产一区2区| 国产一区三区在线播放| 精品久久影院| 精品三级在线| 精品国产精品国产偷麻豆 | 九色精品91| 欧美肉体xxxx裸体137大胆| 日韩毛片在线| 欧美日韩在线二区| 99久久婷婷这里只有精品| 色黄视频在线观看| 成人在线视频区| 色在线中文字幕| 日韩不卡免费高清视频| 日本免费久久| 99久久精品网| 国产视频一区欧美| 三级亚洲高清视频| 蜜桃av一区二区| 日韩欧美久久| 国产精品第十页| 日本精品黄色| 成人羞羞视频在线看网址| 美女av在线免费看| 久久精品国产亚洲夜色av网站| 亚洲一级二级| 国产精品腿扒开做爽爽爽挤奶网站| 国产一区二区精品久| 午夜精品一区二区三区国产| 国产精品久久久久av蜜臀| 久久激情av| 国产精品17p| 97欧美在线视频| 99精品在线免费在线观看| 亚洲欧美伊人| 综合激情一区| 欧美久久久网站| 精品三级在线观看视频| 日本免费一区二区三区四区| 欧美日韩精品在线一区| 欧美在线影院| 久久不射中文字幕| 国产午夜久久av| 麻豆mv在线观看| 黄色成人91| 日韩av电影一区| 国产成人精品亚洲线观看| 视频二区不卡| 蜜臀av性久久久久蜜臀aⅴ流畅| 日本91福利区| 久久电影tv| 亚洲综合精品四区| 国产精品色在线网站| 日韩影院二区| 男女激情视频一区| 久久超碰99| 日韩中文在线播放| 蜜桃传媒麻豆第一区在线观看 | 免费日韩av片| 国产欧美一区二区三区精品观看 | 国产盗摄——sm在线视频| 五月精品视频| 国产麻豆精品| 91精品一区二区三区综合在线爱| 日韩在线一二三区| 国产精品一页| 99久久婷婷| 欧美日本精品| 欧美在线观看视频一区| 青草综合视频| 国产一区二区中文| 日韩av在线免费观看不卡| 日韩伦理福利| 日韩高清在线一区| 91精品久久久久久久久久不卡| 色婷婷成人网| 三上悠亚国产精品一区二区三区| 一二三区精品| 特黄毛片在线观看| 日韩欧美三区| 在线看片国产福利你懂的| 亚洲精品免费观看| 日韩欧美自拍| 国产精品夜夜夜| 久热综合在线亚洲精品| 国产精品99一区二区三|