java 编译 器 ide_Java 8发布一年后,IDE和编译器尚未完全就绪
java 編譯 器 ide
一年前, 2014年3月18日 ,發(fā)布了Java SE 8,并通過lambda表達(dá)式和streams API帶來了功能性編程的幸福。 這對于我們所有的Java生態(tài)系統(tǒng)都是個(gè)好消息,許多人已經(jīng)升級(jí)到Java8。Stack Overflow已經(jīng)提出了將近2500個(gè)有關(guān)Java 8的問題 ( Brian Goetz 親自 回答了 )。 此外, Google趨勢顯示搜索量大幅度增加
但是即使在一年之后,javac編譯器和三個(gè)主要的IDE編譯器都尚未完全支持Java 8。 最近,在堆棧溢出中詢問了用戶問題的這個(gè)問題:
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;}});} }誤報(bào)編譯錯(cuò)誤可能已通過問題429430解決 。 在任何情況下,它都不能與Eclipse 4.5.0 M5一起復(fù)制,它可以作為開發(fā)人員版本使用
使用Java 8,編譯Java代碼實(shí)際上從未比以前更加容易。 上面的錯(cuò)誤是由以下幾種非常細(xì)微的組合產(chǎn)生的:
- 已檢查與未檢查的異常
- 泛型(和例外)
- Lambda表達(dá)式
- 類型推斷
- 流量分析
如果您曾經(jīng)看過編譯器源代碼,那么您不禁會(huì)為其他人為您完成這項(xiàng)工作感到高興( 順便說一句,當(dāng)您查看jOOQ或Hibernate的源代碼時(shí)也是如此)。
我們的編譯器在哪里?
我們到了那里。 我個(gè)人的感覺是,javac的早期訪問版本最有效。 例如,我正在使用
build 1.8.0_40-ea-b23(免責(zé)聲明:本文是在發(fā)表之前撰寫的。1.8.0_40現(xiàn)在已解決許多問題)
…雖然,您可能不想使用這樣的早期訪問版本進(jìn)行生產(chǎn)。 當(dāng)然,使用javac和Maven進(jìn)行構(gòu)建的IDE可以同樣好地工作。 Eclipse有點(diǎn)滯后–有時(shí)可能很煩人。
你們中的一些非Eclipse用戶可能會(huì)傻笑起來并準(zhǔn)備好Eclipse與IntelliJ rants,并且您知道……有這樣的說法:
素食主義者,IntelliJ用戶,Mac用戶和Linux用戶走進(jìn)了酒吧。
我怎么知道?
2分鐘后,全黑酒吧知道!
( 關(guān)于該主題,我們實(shí)際上有整篇文章 )
事實(shí)是,所有編譯器團(tuán)隊(duì)都在努力修復(fù)大量錯(cuò)誤。 即使使用Javac進(jìn)行編譯,IntelliJ仍可能在您的IDE中直觀地顯示一些誤報(bào)。 NetBeans的Geertjan最近修復(fù)了我們報(bào)告的一堆bug 。 而且,Eclipse附帶了自己的非常復(fù)雜的增量Java編譯器。 這是用于快速原型制作的出色編譯器,但缺點(diǎn)是它的編譯內(nèi)容與其他代碼略有不同。
在開發(fā)jOOQ和jOOλ的同時(shí) ,我們發(fā)現(xiàn)了Eclipse中的許多錯(cuò)誤-許多錯(cuò)誤已在Eclipse Mars中修復(fù)。 例如:
- 從lambda表達(dá)式推斷出錯(cuò)誤的通用方法類型
- 單擊Lambda箭頭上的F3和Double Colon運(yùn)算符不起作用
- Lambda可以非法傳遞給不可見的方法參數(shù)
- 在Lambda表達(dá)式中自動(dòng)完成時(shí)插入了多余的分號(hào)
- Diamond運(yùn)算符阻止建議創(chuàng)建新的構(gòu)造函數(shù)
- 從lambda表達(dá)式中訪問不可見成員會(huì)產(chǎn)生誤導(dǎo)性的編譯錯(cuò)誤
- 當(dāng)lambda表達(dá)式將靜態(tài)方法調(diào)用與裝箱/拆箱和一元減運(yùn)算符組合在一起時(shí),會(huì)產(chǎn)生錯(cuò)誤的編譯錯(cuò)誤
- 還有很多…
我們到了那里。 如果可以,請使用lambda和流,并在代碼中盡可能多地使用類型推斷。 并且,如果您發(fā)現(xiàn)錯(cuò)誤,請報(bào)告。 我們可能都在使用這三個(gè)IDE之一。 您報(bào)告的每個(gè)錯(cuò)誤對于采用Java 8的障礙都較小。
以下是開始注冊錯(cuò)誤的鏈接:
- 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 編譯 器 ide
總結(jié)
以上是生活随笔為你收集整理的java 编译 器 ide_Java 8发布一年后,IDE和编译器尚未完全就绪的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛油果产地 牛油果产地在哪
- 下一篇: java美元兑换,(Java实现) 美元