JDK 11 特性冻结!最全的 Java 11 API 变更提案一览

640?wx_fmt=gif

自从上个月进入“减速(ramp-down)”阶段以来,JDK 11 的特性已经处于冻结状态。这些重大的变化已被列为 JEP(JDK Enhancement Proposal 特性增强提议)。此外,JDK 11 中也有很多除 JEP 之外的变化,但官方尚未总结。因此,本文将列出我所知道的 JDK 11 中的 API 变更。


640?wx_fmt=png

String


lines()

字符串实例方法,使用专门的 Spliterator 来懒惰地提供源字符串中的行。

640?wx_fmt=png

repeat(int)

按照参数 int 提供的次数来重复字符串的运行次数。

640?wx_fmt=png

isBlank()

验证当前字符串是否为空,或者是否只包括空白字符(空白字符由 Character.isWhiteSpace(int) 验证)。

640?wx_fmt=png

strip()/stripLeading()/stripTrailing()

这三个方法的作用分别是去掉字符串头和尾的空白符、字符串头的空白符、字符串尾的空白符,基本与 trim()/trimLeft()/trimRight() 方法相同,不过它们的空白字符由 Character.isWhiteSpace(int) 验证。

640?wx_fmt=png


640?wx_fmt=png

CharSequence


compare(CharSequence, CharSequence)

按字典顺序进行排序。

它被 CharSequence/StringBuffer/StringBuilder 中的 compareTo() 使用。因此,这三个类都实现了 Comparable。


640?wx_fmt=png

Character


toString(int)

JDK 11 使这个过程变得更加方便。

JDK10.0.1

640?wx_fmt=png

JDK11ea14

640?wx_fmt=png


640?wx_fmt=png

Path


of(String, String...)

此前我们需要使用 Paths.get()。现在,我们像其他类一样使用 of()。


640?wx_fmt=png

Files


writeString(Path, CharSequence)

我们可以使用该方法来保存一个 String 字符串。

640?wx_fmt=png

readString(Path)

我们可以使用该方法来读取一个 String 字符串。

640?wx_fmt=png


640?wx_fmt=png

Reader


nullReader()

使用该方法,我们可以得到一个不执行任何操作的 Reader。


640?wx_fmt=png

Writer


nullWriter()

使用该方法,我们可以得到一个不执行任何操作的 Writer。


640?wx_fmt=png

InputStream


nullInputStream()

使用该方法,我们可以得到一个不执行任何操作的 InputStream。


640?wx_fmt=png

OutputStream


nullOutputStream()

使用该方法,我们可以得到一个不执行任何操作的 OutputStream。


640?wx_fmt=png

Predicate


not(Predicate)

此前在需要反转条件的地方,我们选择不使用方法引用。现在相反,我们可以使用方法引用。

640?wx_fmt=png


640?wx_fmt=png

Collection


toArray(IntFunction)

此前,我们需要使用像 list.toArray(new String[list.size())]) 这样的无风格标记(non-stylish notation)来从一个集合创建一个类型化数组。现在,我们可以以风格标记(stylish notation)的方式进行编写。

640?wx_fmt=png


640?wx_fmt=png

Optional/OptionalInt/OptionalLong/OptionalDouble


isEmpty()

isPresent() 方法此前已经存在,现在我们使用 isEmpty() 方法。

640?wx_fmt=png


640?wx_fmt=png

TimeUnit


convert(Duration)

该方法已经添加到 java.util.concurrent.TimeUnit 中。


640?wx_fmt=png

Pattern


asMatchPredicate()

到目前为止,只有 asPredicate() 方法,但现在我们还拥有 asMatchPredicate() 方法。

640?wx_fmt=png


640?wx_fmt=png

更多其他特性


ListSelectionModel

已添加 getSelectedIndices() / getSelectedCount() 方法

Thread

destroy()/stop(Throwable)

移除 destroy() 方法,保留 stop() 方法。

Policy

已移除 javax.security.auth.Policy。

ArrayIndexOutOfBoundsException

抛出的异常信息已修改:

JDK10.0.1

640?wx_fmt=png

JDK11ea14

640?wx_fmt=png

IndexOutOfBoundsException

在本次变更中,已在异常信息中移除 hyphens。

JDK10.0.1

640?wx_fmt=png

JDK11ea14

640?wx_fmt=png

System

arraycopy

JDK10

640?wx_fmt=png

JDK11ea19

640?wx_fmt=png

setProperty(String, String)

之前改变 java.home 会导致一些问题,现在问题已得到解决。

支持 Japanese New Era

Japanese Imperial Era 计划于 2019.5.1 改用新的规则。本次变更是作为 NewEra 占位符引入的。

在日本政府宣布之后,它将在 JDK 12.0.1 中进行更新。

JDK10.0.1

640?wx_fmt=png

JDK11 ea18

640?wx_fmt=png

目前我们还未能将 May 1st Heisei 31 作为我们的 JapaneseDate。

JDK10.0.1

640?wx_fmt=png

JDK11 ea18

640?wx_fmt=png

Base64

从 ea20 起,使用 AVX512 进行编码会变得更快,但在 Windows 上无法确定。

Boolean

parseBoolean

官方表示,在删除冗余的空检查后,它的速度变得更快。

JDK10

640?wx_fmt=png

JDK11

640?wx_fmt=png

还未确定是否存在性能差异。

TimSort

TimSort 是用于 Array.sort() 和 Collection.sort() 的主要算法。

但它有一个错误,主要发生在为某些序列抛出一个 ArrayIndexOutOfBoundsException 异常,不过似乎已修复,尚未确定。

声明:本文经授权转自开源中国(oschina2013),作者OSC-局长。

640?wx_fmt=gif

640?wx_fmt=gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值