java 枚举内嵌枚举_高度有用的Java ChronoUnit枚举
java 枚舉內嵌枚舉
幾年前,我發表了博客文章“ The Highly有用的Java TimeUnit Enum ”,其中介紹了JDK 5引入的TimeUnit枚舉。 JDK 8引入了一個更新的枚舉ChronoUnit ,它比TimeUnit更適合于并發以外的上下文(例如日期/時間操作)。
位于所述java.time.temporal包 ,所述ChronoUnit類實現TemporalUnit接口 ,接口廣泛使用的在高度期望 JDK 8導入日期/時間API 。 博客文章“ Java 8中的日期之間的天數 ”演示了使用此類來計算兩個Temporal實例之間的時間段 。
博客文章“ Java 9.硬編碼“永遠”的地方。 ”介紹了JDK 9的“ TimeUnit類中的兩個新方法” 。toChronoUnit()和of(ChronoUnit)這些方法支持將TimeUnit轉換為ChronoUnit以及將ChronoUnit為TimeUnit 。 并非ChronoUnit所有值都可以轉換為TimeUnit的等效值,在這種情況下,將拋出IllegalArgumentException 。
關于ChronoUnit中每個值的Javadoc注釋描述了每個值代表什么時間單位。 但是,對ChronoUnit每個值返回什么樣的Duration ,這對我來說很有趣。 以下代碼段會將這些Duration的toString()表示形式寫入ChronoUnit枚舉中的所有值的標準輸出。
顯示計時單位的持續時間
for (final ChronoUnit unit : ChronoUnit.values()) {final Duration duration = unit.getDuration();out.println(unit + ": " + duration + " (" + duration.getSeconds() + " seconds)"); }執行后,以上代碼將產生以下輸出:
Nanos: PT0.000000001S (0 seconds) Micros: PT0.000001S (0 seconds) Millis: PT0.001S (0 seconds) Seconds: PT1S (1 seconds) Minutes: PT1M (60 seconds) Hours: PT1H (3600 seconds) HalfDays: PT12H (43200 seconds) Days: PT24H (86400 seconds) Weeks: PT168H (604800 seconds) Months: PT730H29M6S (2629746 seconds) Years: PT8765H49M12S (31556952 seconds) Decades: PT87658H12M (315569520 seconds) Centuries: PT876582H (3155695200 seconds) Millennia: PT8765820H (31556952000 seconds) Eras: PT8765820000000H (31556952000000000 seconds) Forever: PT2562047788015215H30M7.999999999S (9223372036854775807 seconds)上面顯示的每個Duration字符串表示形式上的“ PT”前綴表示根據ISO-8601標準 ,該表示形式是“期間”持續時間標記(“ P”)和“時間”指示(“ T”)。 “ S”,“ M”和“ H”分別是秒,分鐘和小時。 的值ChronoUnit代表時間單位小于秒( NANOS , MICROS ,和MILLIS )示出了“0秒”,因為它們是小于1秒,返回值是一個整體long 。
關于ChronoUnit類中定義的每個值的Javadoc注釋編寫得很好。 它們遵循我的想法,是Javadoc的“最佳實踐”:在Javadoc中放置簡潔但內容豐富的初始句子,以顯示在生成HTML頁面的“方法摘要”部分中,并在該初始摘要之后的句子中放置其他有用的詳細信息句子。 例如, ChronoUnit.ERAS的Javadoc注釋指出:“ 代表時代概念的單位。 ISO日歷系統沒有紀元,因此不可能在日期或日期時間中添加紀元。 人為地將時代的估計持續時間定義為1,000,000,000年。 與其他日歷系統一起使用時,該裝置沒有任何限制。” “方法摘要”中顯示的是加粗的句子(我加了強調),此處顯示的全部文本完整顯示在方法上方。
在ChronoUnit枚舉中,更有趣的值之一是FOREVER 。 如上面代碼清單的輸出所示, FOREVER值的Duration為“ PT2562047788015215H30M7.999999999S”,對應于2562047788015215小時,30分鐘和7.999999999秒。 或者,正如Grzegorz Gajos所說的那樣,“ Java 永遠將其定義為9 223 372 036 854 775 807秒。 這是2.92277266×10 11年。 最好確保在超時之前安排在應用程序中進行Java升級?!?
ChronoUnit.FOREVER會有用? 其基于Javadoc的描述解釋了其存在的主要原因:“代表永遠概念的人工單位。 這主要與TemporalField一起使用,以表示無限制的字段,例如年份或時代。 人為地將時代的估計持續時間定義為Duration支持的最大持續Duration ?!?
TimeUnit是使用Java的并發構造的有用枚舉 ,并且可以在并發以外的其他上下文中使用,只要考慮了對這些其他上下文的一些嚴格限制即可。 JDK 8引入的ChronoUnit對于這些非并發上下文來說是一個更好的枚舉,并且特別設計用于JDK 8 Date / Time API
翻譯自: https://www.javacodegeeks.com/2018/01/highly-useful-java-chronounit-enum.html
java 枚舉內嵌枚舉
總結
以上是生活随笔為你收集整理的java 枚举内嵌枚举_高度有用的Java ChronoUnit枚举的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机安卓游戏(安卓游戏手机推荐)
- 下一篇: 已备案网站(已备案网址)