设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客

新版观察:Java 8的新特性和改进总览

2013-5-2 10:12| 发布者: joejoe0332| 查看: 4493| 评论: 0|原作者: super0555, throwable, 等PM, LinuxQueen, JeromeCui, 乔学士, Sender, 叫我蝴蝶吧|来自: oschina

摘要:   这篇文章是对Java 8中即将到来的改进做一个面向开发者的综合性的总结,JDK的这一特性将会在2013年9月份发布。   在写这篇文章的时候,Java 8的开发工作仍然在紧张有序的进行中,语言特新和API仍然有可能改变 ...

反射和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变量时更好的进行初始化。之前你初始化变量时是这样的:

1ThreadLocal<List<String>> strings = new ThreadLocal<List<String>>() { @Override protected List<String> initialValue() { return new ArrayList<>();
2        }
3    };
现在则是这样:
1ThreadLocal<List<String>> strings =
2    ThreadLocal.withInital(ArrayList::new);

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来阐明,这也算是一件好事。
ComparatorsandComparator.thenComparing(...)提供了非常优秀的工具,基于链的比较和基于域的比较。像这样:

1people.sort(Comparators.comparing(Person::getLastName)
2                       .thenComparing(Person::getFirstName));

这些新增功能提供了良好的,复杂的各种可读的简写。大多数用例由JDK里增加的 ComparisonChain和Ordering工具类来提供服务。对于什么是有价值的,我认为JDK版本比在Guava-ese里功能等效的版本的可读性好了很多。

更多?

其实,还有很多的小问题的修正和一些性能的改进在这篇文章中没有提及,但是那些也是非常的重要的。

写这篇文章主要是想全面的介绍到Java 8的每个语言层面和API层面的改进,如果有遗漏,那就是个错误。如果你发现了这样的错误请告诉我,你可以通过e-mail联系我或者是在黑客咨询上发布评论。


酷毙

雷人

鲜花
1

鸡蛋

漂亮

刚表态过的朋友 (1 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部