在这次采访中(最初以德语在Eclipse Magazine上发表),Pivotal Inc.首席软件工程师Martin Lippert讨论了最新的Java版本以及Eclipse IDE开发的兴衰。
JAX:Java 8对您有哪些亮点?
Lippert: 在Java 8中,对我来说特别 值得一提的 是lambda表达式。 有了它们,代码可以编写得更简单,清晰,许多麻烦的Inner类终于消失了。 尤其是与Streams API和集合的相关扩展结合使用时,lambda表达式看起来非常优雅。
关于Java新语言功能的许多宣传都针对lambda表达式。 IntelliJ IDEA早就意识到了这一点,并Swift提供了初步的支持。 Eclipse稍微落后了–这是为什么呢?
我认为有多种原因。 首先,Eclipse中使用的Java工具:它具有自己的编译器实现,与Javac编译器无关。 该编译器是Java工具的核心部分。 它不仅生成类文件,还生成示例抽象语法树,其余工具使用这些树来实现我们都非常喜欢的许多有用功能。 诸如内容辅助,自动完成,重构,快速修复等功能。
此外,Eclipse Java编译器非常快,可以增量编译,甚至可以从语法上不正确的代码生成可用的Class文件,并在错误和警告的手段上执行大量的静态代码分析,各种可能表明编程错误的方法。 它在许多方面都优于标准javac编译器。 但是,另一方面,对语言的所有更改都会影响编译器,因此必须将其锁定在Eclipse Java编译器中。 这需要时间。
在Java 8的情况下,事实是,很长一段时间以来,对于每个功能的规范都不清晰且不完整。 即使在最近,对于编译器重要的许多细节也已更改。 当然,这不是实现编译器的最佳基础。 因此,我认为,团队在真正开始工作之前,已经在规范的许多方面等待了良好的基础。
另一方面,其他IDE则具有一定的优势,因为它们通常不实现自己的编译器,而是使用JDK的现有编译器。
因此,他们无需构建完整的编译器,而只需构建一个解析器即可实现IDE功能。 当然,这要快得多,并且您可以像IntelliJ for Java 8一样,更早地支持新的语言版本-直到早期的beta版本。
在Java工具方面,随着技术的挑战,随着时间的推移,Eclipse也伴随着人员挑战,因为JDT Core团队经历了巨大的变化。 它必须将新人员纳入现有的编译器实现中,这不应被低估。
最后,您应该记住,Eclipse的Java-8支持可能会在官方JDK8发行版中按时提供。 认为Eclipse JDT团队再次做了非常出色的工作。
Eclipse将来发布自己的编译器是否有意义?
我想是的。 Eclipse的编译器是一种非常优秀且非常快速的Java编译器,它是其他任何软件都无法比拟的。 它在社区中享有很高的声誉,不仅可以在Eclipse中使用,而且还可以作为Java编译器在其他产品和项目中使用。
例如,Tomcat使用Eclipse编译器来转换生成的代码(例如JSP)。 因此,如果不进一步开发该编译器,已经是很大的损失。 此外,它提供的功能比标准编译器多得多。 这些是我不想错过的功能。 编译器执行的大量静态代码分析特别有用。 其他编译器无法竞争。
我还认为,从Java语言开发的角度来看,拥有另一个完全独立的编译器实现很有用。 可以快速检测到规范中的空白和/或歧义,并可以进行讨论和解决。 因此,可以在原始javac编译器中找到错误。
尤其重要的是,将Eclipse中的现有Java工具转换为外部标准Java编译器(如javac)(如果可能的话)当然是一项巨大的工作–考虑到在进行转换时,您几乎没有任何意义。将会失去非常有用的功能-而不是获得新功能。
目前的发展状况如何?
编译器实现与完成一样好。 在此方面,错误仍然主要是修复程序,并且添加了少量补充。 因此,IDE能够理解Java 8源代码并进行编译,包括已经不言而喻的功能,从语法突出显示到协调和错误报告。 您可以使用IDE毫无问题地编辑任何基于Java -8的源代码,进行编译和运行-对于lambda表达式而言,这并不是一件容易的事。
此外,最近在UI领域发生了很多事情,因此现在几乎在所有地方都可以进行内容辅助和自动完成。 甚至lambda,特定的重构已经可以工作,最重要的是,您可以使用该重构在lambda表达式中转换匿名内部类(反之亦然)。 作为清理操作,这是一个很大的缓解。
除了lambda表达式外,新的类型注释也很有趣,并且已经由JDT支持。 可以给类型添加注释,比以前更加灵活。 对此的标准情况是@ NonNull批注,可以将其附加,例如,现在集合的列表元素的类型(作为可插入类型系统的示例)。
尽管在标准JDK中仅实现了实际的机制,但已经使用现成的注释(例如@ NonNull)来实现Eclipse,Eclipse编译器会对其进行检查。 Eclipse Java 8中已经具有此功能,但是现在有了Type注释变得更加灵活。 通过一致地替换这些批注,您可以在代码中节省许多空检查,而依赖于编译器。 一个非常有用的编译器功能。
您分别受雇于Pivotal和SpringSource。 对于Spring来说,插入Eclipse Tooling的好处到底在哪里?
我们的目标是使下一代应用程序的开发尽可能简单高效。 因此,我们在整个其他框架和库中与Spring框架一起工作,这些框架和库仅使真正的现代应用程序开发真正可行,例如Spring XD,Gemfire,RabbitMQ,Redis,当然还有Cloud Foundry(仅举几例)。
除了实际的框架,库和运行时环境之外,还有诸如IDE之类的工具可以支持日常应用程序开发。 谁想今天错过内容支持,重构支持或JUnit集成? 而且,IDE对所使用的编程模型和/或框架了解得越多,它们所提供的支持就越好。 IDE的选择通常是一个问题。 一些开发人员对IntelliJ IDEA发誓,而其他开发人员则更喜欢Eclipse。 在这两种情况下,他们都应该获得使用Spring的最佳支持。
虽然Jetbrains和Spring支持IntelliJ和Oracle负责Netbeans对Spring的支持,但我们将工作重点放在Eclipse IDE上,最终Java领域中使用最广泛的IDE也应该为Spring提供出色的支持(笑)。 这样,各种Eclipse发行版的用户也可以从Spring工具中受益。
此外,我们受益于Eclipse社区中不同公司的合作。 Eclipse IDE提供了一个出色的平台,不同的公司可以在该平台上实施不同的组件,然后将这些组件加入到一个综合的IDE中。 例如,当我们实施Spring工具时,其他小组将在Eclipse和WTP中进行Maven集成。 最后,每个人都将从中受益:手中拥有广泛的IDE的用户以及互惠互利的IDE开发人员。
翻译自: https://jaxenter.com/java-8-support-in-eclipse-107723.html