反射和annotation的改动
Annotation允许在更多的地方被使用,例如List<@Nullable String>。受此影响最大的可能是那些静态分析工具,如Sonar和FindBugs。 JSR 308的网站解释了增加这些改动的动机,介绍的不错: "类型Annotation (JSR 308) 和 Checker框架" Nashorn JavaScript 引擎提案的摘要: JEP 174: Nashorn JavaScript 引擎 我对Nashorn没什么经验,因而我对上面提案所描述的所知甚少。简单的说,它是 Rhino 的接替者。Rhino 显得有些老了,并且有点慢,开发者决定最好还是从头做一个。 其他新增,涉及java.lang,java.util,和java.sql
这里可以介绍的太多了,只能挑一些最需要注意的项目。 ThreadLocal.withInitial(Supplier<T>) 可以在定义thread-local变量时更好的进行初始化。之前你初始化变量时是这样的:
stream的API的返回值有一个可选的<T>,就像min/max, findFirst/Any,
以及reduce的某些形式。这样做是因为stream中可能没有任何元素,但是它要提供一个一致的API,既可以处理“一些结果”,也可以处理“没有结
果”。你可以提供默认值,抛异常,或者只在有结果的时候执行一些动作。 它与Guava's Optional类非常非常的相似。它一点都不像是在Scala里的操作,也不会试图成为之一,有相似的地方纯属巧合。
旁白:Java 8's Optional和Guava's Optional最终如此的相似是很有趣的事,尽管荒谬的辩论发生在这两个库。 "FYI.... Optional was the cause of possibly the single greatest conflagration on the internal Java libraries discussion lists ever." Kevin Bourrillion在 response to "Some new Guava classes targeted for release 10"如实写到: "On a purely practical note, the discussions surrounding Optional have exceeded its design budget by several orders of magnitude."Brian Goetz 在 response to "Optional require(s) NonNull"写到。
StringJoinerandString.join(...)来得太晚了。他们来得如此之晚以至于大多数Java开发者已经为字符串联合编写或发现了
有用的工具,但这对JDK本身来说很每秒,因为最终自己实现这一点。每个人都会遇到要求字符串连接的情形,我们现在能够通过每个Java开发者(事实上
的)即将知道的标准的API来阐明,这也算是一件好事。
这些新增功能提供了良好的,复杂的各种可读的简写。大多数用例由JDK里增加的 ComparisonChain和Ordering工具类来提供服务。对于什么是有价值的,我认为JDK版本比在Guava-ese里功能等效的版本的可读性好了很多。
更多?其实,还有很多的小问题的修正和一些性能的改进在这篇文章中没有提及,但是那些也是非常的重要的。 写这篇文章主要是想全面的介绍到Java 8的每个语言层面和API层面的改进,如果有遗漏,那就是个错误。如果你发现了这样的错误请告诉我,你可以通过e-mail联系我或者是在黑客咨询上发布评论。
|