应用JDK 9 @不推荐使用的增强功能
我在博客文章JDK 9 @Deprecated Annotation Enhancements中討論了針對@Deprecated注釋的當前建議的JDK 9增強 功能 。 在本文中,我將更詳細地介紹這些次要增強功能的建議用法,并說明關鍵的Java SE API如何已經應用了這些@Deprecated增強功能。
JEP 277主頁面(“ Enhanced Deprecation”)的當前版本指出:“增強@Deprecated注解的主要目的是向工具提供有關API棄用狀態的更詳細的信息。” 該頁面還描述了添加到@Deprecated批注[ forRemoval()和since() ]的兩個新方法:
- “用于forRemoval()的方法返回boolean 。 如果為true ,則表示此API元素已指定在將來的版本中刪除。 如果為false ,則不推薦使用API??元素,但是目前不打算在將來的版本中將其刪除。 此元素的默認值為false 。 … forRemoval() boolean元素,如果為true ,則表示有意在將來的項目版本中刪除該API元素。 因此,會提前向API用戶發出警告,如果他們不從API遷移過來,則他們的代碼在升級到較新版本時可能會被破壞。 如果forRemoval()為false ,則表明建議從已棄用的API遷移,但沒有刪除該API的任何具體意圖。”
- “一個名為since()方法,它返回String 。 該字符串應包含不贊成使用此API的發行版或版本號。 它具有自由格式的語法,但是發行版編號應遵循與@since Javadoc標記相同的方案,以用于包含已棄用API的項目。 …此元素的默認值為空字符串。”
本文清楚地表明,其意圖是能夠明確聲明是否可能(計劃中)刪除不推薦使用的元素,或者是否沒有計劃刪除不推薦使用的元素。 對于該不贊成使用的元素的客戶來說,這可能是重要的信息,他們需要以何種緊急程度將不贊成使用的元素的使用更改為其他元素。
Java SE API上新的JDK 9 @Deprecated方法的應用還可以指導如何使用它們。 關于這一點, JEP 277頁面當前指出(我的重點是增加),“幾個Java SE API將添加,更新或刪除@Deprecated注釋。 下面列出了一些建議的更改。 除非另有說明,否則此處列出的棄用項不適用 。 請注意,這不是Java SE 9中不推薦使用的全面列表。還請注意,其中一些項目將不會在Java SE 9中實現 。” 考慮到這一概述,我現在將注意力轉向當前JDK 9 API文檔中的示例,以說明這些概念。
JEP 277的網頁當前列出“向Optional.get方法添加@Deprecated( JDK-8160606 )”作為適用于“建議的更改”的Java SE API之一。 由于不推薦使用Optional.get()當前與一個錯誤( JDK-8160606 )相關聯,因此即使當前的Javadoc文檔尚未顯示已應用,但JDK 9仍未排除它。 接下來的兩個屏幕快照展示了Java SE 9中尚未棄用Optional.get()的情況。
Java SE 8:引入了Optional.get()
Java SE 9:尚未棄用Optional.get()
已棄用,無拆除計劃
JEP 277在Java SE API列表中棄用了“盒裝原語”的構造函數,并在@Deprecation處理中提出了“建議的更改”。 接下來的兩個屏幕快照演示了JDK 9版本的Boolean確實將新的@Deprecated注釋應用于其構造函數。
Java SE 8:不建議使用Boolean構造函數
Java SE 9: since=9不推薦使用Boolean構造函數
值得注意的是,新應用的@Deprecated批注包含一個新方法( since="9" ),而不包括另一個(不forRemoval() 。在這種情況下,除非另有說明,否則Boolean的用戶應假定,從Java SE 9開始不推薦使用Boolean構造函數,但是目前尚無刪除這些不推薦使用的構造函數的計劃。
就JDK 9 @Deprecated注釋而言,Applet類的處理與“盒裝原始”構造函數類似。 像盒裝基元類的構造函數一樣,在JDK 9中新棄用了與小應用程序相關的類,在注釋中添加了since="9" ,以使其清楚地表明它們已使用Java SE 9進行了注釋,而沒有指定了forRemoval() (意味著假定為false )。 小程序棄用由JEP 289 (“棄用小程序API”)涵蓋,該程序的確聲明“將@Deprecated(since="9")批注添加到選定的小程序相關類。
自JDK 9起@Deprecated Applet類,但沒有forRemoval()
棄用并計劃移除
JDK 9中已棄用并標記為刪除的示例之一是System.runFinalizersOnExit(boolean) 。 以下屏幕快照表明,此方法在Java SE 8中已被棄用,但是在Java SE 9中已棄用該方法,也表明有意刪除此方法。 我還喜歡它傳達的信息,表明該方法在Java 1.2中已被棄用。
Java SE 8:不推薦使用的方法,刪除計劃或版本最初不建議使用
Java SE 9:不推薦使用的方法通信原始不推薦使用的版本和刪除意圖
結論
JEP 277是有關@Deprecated的當前缺陷以及JDK 9的較小增強如何減輕這些缺陷的至少一部分的高度可讀的論文。 盡管從許多方面來說,JDK 9更改為@Deprecated可能被稱為“嬰兒步驟”,但與JDK 9之前的版本@Deprecated ,它們確實提供了一些標準化的功能來傳達特定的棄用歷史和未來計劃。所謂的“ Java SE中的用法”本身很有趣,因為它描述了幾個Java SE API(本文中僅強調了其中的一個子集),這些API被提議更改其棄用狀態或具有有關棄用歷史的其他詳細信息和/或將來的計劃添加到其中。
翻譯自: https://www.javacodegeeks.com/2016/08/applying-jdk-9-deprecated-enhancements.html
總結
以上是生活随笔為你收集整理的应用JDK 9 @不推荐使用的增强功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javadoc maven_Maven
- 下一篇: 电脑硬盘分类及其解析(硬盘分类及区别)