java 编译 器 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表达式中自动完成时插入了多余的分号
- Diamond运算符阻止建议创建新的构造函数
- 从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 编译 器 ide