Java 8发布一年后,IDE和编译器尚未完全就绪
一年前,即2014年3月18日 ,發布了Java SE 8,并伴隨著通過lambda表達式和streams API實現了功能性編程的幸福。 這對于我們所有的Java生態系統都是個好消息,許多人已經升級到Java8。Stack Overflow已經提出了大約2500個有關Java 8的問題 ( Brian Goetz 親自 回答了 )。 此外, Google趨勢顯示搜索量大幅度增加
但是即使在一年之后,javac編譯器和三個主要的IDE編譯器都還沒有完全支持Java 8。 最近,在堆棧溢出中詢問了用戶問題的這個問題:
Lambda類型推論推斷Lambda未拋出的異常類型
該問題顯示以下代碼:
class TestException extends Exception { }interface Task<E extends Exception> {void call() throws E; }public class TaskPerformer {private <E extends Exception> void perform(Task<E> task) throws E {task.call();}public static void main(String[] args) {// compilation errornew TaskPerformer().perform(() -> {try {throw new TestException();} catch (TestException e) {return;}});} }誤報編譯錯誤可能已通過問題429430解決 。 在任何情況下,它都不能與Eclipse 4.5.0 M5一起復制,它可以作為開發人員版本使用
使用Java 8,編譯Java代碼實際上從未比以前更加容易。 上面的錯誤是由以下幾種非常細微的組合產生的:
- 已檢查與未檢查的異常
- 泛型(和例外)
- Lambda表達式
- 類型推斷
- 流量分析
如果您曾經看過編譯器源代碼,那么您不禁會為其他人為您完成這項工作感到高興( 順便說一句,當您查看jOOQ或Hibernate的源代碼時,情況也是如此)。
我們的編譯器在哪里?
我們到了那里。 我個人的感覺是,javac的早期訪問版本最有效。 例如,我正在使用
build 1.8.0_40-ea-b23(免責聲明:本文是在發表之前撰寫的。1.8.0_40現在已解決許多問題)
…雖然,您可能不想使用這樣的早期訪問版本進行生產。 當然,使用javac和Maven進行構建的IDE都可以很好地工作。 Eclipse有點滯后–有時可能很煩人。
你們中的一些非Eclipse用戶可能會傻笑起來并準備好Eclipse與IntelliJ rants,并且您知道……有這樣的說法:
素食主義者,IntelliJ用戶,Mac用戶和Linux用戶走進了酒吧。
我怎么知道?
2分鐘后,全黑酒吧知道!
( 關于該主題,我們實際上有整篇文章 )
事實是,所有編譯器團隊都在努力修復大量錯誤。 即使使用Javac進行編譯,IntelliJ仍可能在您的IDE中直觀地顯示一些誤報。 來自NetBeans的Geertjan最近修復了我們報告的一堆bug 。 而且,Eclipse附帶了自己的非常復雜的增量Java編譯器。 這是用于快速原型制作的出色編譯器,但是缺點是編譯內容與其他版本略有不同。
在開發jOOQ和jOOλ的同時 ,我們發現了Eclipse中的許多錯誤-許多錯誤已在Eclipse Mars中修復。 例如:
- 從Lambda表達式推斷出錯誤的通用方法類型
- 單擊Lambda箭頭上的F3和Double Colon運算符不起作用
- Lambda可以非法傳遞給不可見的方法參數
- 在Lambda表達式中自動完成時插入了多余的分號
- 菱形運算符阻止建議創建新的構造函數
- 從lambda表達式內部訪問不可見成員會產生誤導性的編譯錯誤
- 當lambda表達式將靜態方法調用與裝箱/拆箱和一元減運算符組合在一起時,會產生錯誤的編譯錯誤
- 還有很多…
我們到了那里。 如果可以,請使用lambda和流,并在代碼中盡可能多地應用類型推斷。 而且,如果您發現錯誤,請報告。 我們可能都在使用這三個IDE之一。 您報告的每個錯誤對于采用Java 8的障礙都較小。
以下是開始注冊錯誤的鏈接:
- Eclipse: https : //bugs.eclipse.org/bugs
- IntelliJ: https : //youtrack.jetbrains.com
- NetBeans: https : //netbeans.org/bugzilla
翻譯自: https://www.javacodegeeks.com/2015/03/one-year-after-java-8s-release-ides-and-compilers-are-not-fully-ready-yet.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java 8发布一年后,IDE和编译器尚未完全就绪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (linux的ftp配置)
- 下一篇: 具有Spring Boot和数据功能的J