JDK 11 已处于特性冻结状态,看看 Java 11 API
译者:OSC-局长
转载请在文中注明上述信息,其他来源无效
自从上个月进入“减速(ramp-down)”阶段以来,JDK 11 的特性已经处于冻结状态。这些重大的变化已被列为 JEP(JDK Enhancement Proposal 特性增强提议)。此外,JDK 11 中也有很多除 JEP 之外的变化,但官方尚未总结。因此,本文将列出我所知道的 JDK 11 中的 API 变更。
![](https://img.haomeiwen.com/i1977282/990aaad535a49891.png)
String
lines()
字符串实例方法,使用专门的 Spliterator 来懒惰地提供源字符串中的行
![](https://img.haomeiwen.com/i1977282/b54d920e77c288a6.jpg)
repeat(int)
按照参数 int 提供的次数来重复字符串的运行次数
![](https://img.haomeiwen.com/i1977282/b85ae99f7abdb8b5.jpg)
isBlank()
验证当前字符串是否为空,或者是否只包括空白字符(空白字符由 Character.isWhiteSpace(int) 验证)
![](https://img.haomeiwen.com/i1977282/1b59a53b6a6b0f1a.jpg)
strip()/stripLeading()/stripTrailing()
这三个方法的作用分别是去掉字符串头和尾的空白符、字符串头的空白符、字符串尾的空白符,基本与 trim()/trimLeft()/trimRight() 方法相同,不过它们的空白字符由 Character.isWhiteSpace(int) 验证
![](https://img.haomeiwen.com/i1977282/75de5411c4a366ff.jpg)
CharSequence
compare(CharSequence, CharSequence)
按字典顺序进行排序
它被 CharSequence/StringBuffer/StringBuilder 中的 compareTo() 使用。因此,这三个类都实现了 Comparable。
Character
toString(int)
JDK 11 使这个过程变得更加方便
JDK10.0.1
![](https://img.haomeiwen.com/i1977282/0a17a883da9acc74.jpg)
JDK11ea14
![](https://img.haomeiwen.com/i1977282/2ad2736cd26ca3b2.jpg)
Path
of(String, String...)
此前我们需要使用 Paths.get()。现在,我们像其他类一样使用 of()。
Files
writeString(Path, CharSequence)
我们可以使用该方法来保存一个 String 字符串。
![](https://img.haomeiwen.com/i1977282/9cdeee404ede0015.jpg)
Reader
nullReader()
使用该方法,我们可以得到一个不执行任何操作的 Reader。
Writer
nullWriter()
使用该方法,我们可以得到一个不执行任何操作的 Writer。
InputStream
nullInputStream()
使用该方法,我们可以得到一个不执行任何操作的 InputStream。
OutputStream
nullOutputStream()
使用该方法,我们可以得到一个不执行任何操作的 OutputStream。
Predicate
not(Predicate)
此前在需要反转条件的地方,我们选择不使用方法引用。现在相反,我们可以使用方法引用。
![](https://img.haomeiwen.com/i1977282/c227b5f566068006.jpg)
Collection
toArray(IntFunction)
此前,我们需要使用像 list.toArray(new String[list.size())]) 这样的无风格标记(non-stylish notation)来从一个集合创建一个类型化数组。现在,我们可以以风格标记(stylish notation)的方式进行编写。
![](https://img.haomeiwen.com/i1977282/4212aa478dd0118b.jpg)
Optional/OptionalInt/OptionalLong/OptionalDouble
isEmpty()
isPresent() 方法此前已经存在,现在我们使用 isEmpty() 方法。
![](https://img.haomeiwen.com/i1977282/df2622a0db06a918.jpg)
TimeUnit
convert(Duration)
该方法已经添加到 java.util.concurrent.TimeUnit 中。
Pattern
asMatchPredicate()
到目前为止,只有 asPredicate() 方法,但现在我们还拥有 asMatchPredicate() 方法。
![](https://img.haomeiwen.com/i1977282/13261f1491c62a83.jpg)
ListSelectionModel
已添加 getSelectedIndices() / getSelectedCount() 方法
Thread
destroy()/stop(Throwable)
移除 destroy() 方法,保留 stop() 方法。
Policy
已移除 javax.security.auth.Policy。
ArrayIndexOutOfBoundsException
抛出的异常信息已修改:
JDK10.0.1
![](https://img.haomeiwen.com/i1977282/ffb122690e117072.jpg)
JDK11ea14
![](https://img.haomeiwen.com/i1977282/2f6be7cbb8becddf.jpg)
IndexOutOfBoundsException
在本次变更中,已在异常信息中移除 hyphens。
JDK10.0.1
![](https://img.haomeiwen.com/i1977282/e013b4887ae198ce.jpg)
JDK11ea14
![](https://img.haomeiwen.com/i1977282/10e2f04351104323.jpg)
System
arraycopy
JDK10
![](https://img.haomeiwen.com/i1977282/c565f2a7718428af.jpg)
JDK11ea19
![](https://img.haomeiwen.com/i1977282/216e1b67da3cc781.jpg)
setProperty(String, String)
之前改变 java.home 会导致一些问题,现在问题已得到解决。
支持 Japanese New Era
Japanese Imperial Era 计划于 2019.5.1 改用新的规则。
本次变更是作为 NewEra 占位符引入的。
在日本政府宣布之后,它将在 JDK 12.0.1 中进行更新。
JDK10.0.1
![](https://img.haomeiwen.com/i1977282/74e42df28fdc2efd.jpg)
目前我们还未能将 May 1st Heisei 31 作为我们的 JapaneseDate。
![](https://img.haomeiwen.com/i1977282/1d6c278f29a491cb.jpg)
Base64
从 ea20 起,使用 AVX512 进行编码会变得更快,但在 Windows 上无法确定。
Boolean
parseBoolean
官方表示,在删除冗余的空检查后,它的速度变得更快。
JDK10
![](https://img.haomeiwen.com/i1977282/88aa6cfa93b6eaa2.jpg)
还未确定是否存在性能差异。
TimSort
TimSort 是用于 Array.sort() 和 Collection.sort() 的主要算法。
但它有一个错误,主要发生在为某些序列抛出一个 ArrayIndexOutOfBoundsException 异常,不过似乎已修复,尚未确定。
来源:https://dzone.com/编译:开源中国
更多精彩内容请关注开源中国微信公众号(oschina2013)