Java 12也是两个LTS版之间的小进化版本,这个版本带来的变化也主要集中在优化开发者体验上。
本系列的文章有:
- Java 8的新特性
- Java 9的新特性
- Java 10的新特性
- Java 11的新特性
- Java 12的新特性
- Java 13的新特性
- Java 14的新特性
- Java 15的新特性
- Java 16的新特性
- Java 17的新特性
- Java 18的新特性
- Java 19的新特性
- Java 20的新特性
- Java 21的新特性
新字符串方法
String
类新增了两个方法:.indent()
和.transform()
。
.indent()
方法可以为字符串中的每一行增加或减少缩进。这个方法可以接受一个整型值作为参数,如果参数值为正值,那么所有行的缩进将增加指定数量的空格;如果参数值为负值,那么所有行的缩进将减少指定数量的空格。.indent()
方法只影响每行前的空格,不会影响其他字符。
.transform()
方法可以接受一个Function<String, String>
类型的参数,主要用于对指定的字符串进行变换。
文件差异比较
Java 12在java.nio.file.Files
工具类中提供了一个名为.mismatch()
的方法。这个方法接受两个Path
类型的值作为参数,会返回这两个Path
所指代的内容中出现的第一处不一致的字节位置。如果两个文件是一样的,那么这个方法将返回-1
。
Stream合并收集器
合并收集器主要是用来把一个Stream的两个Collector合并在一起,形成一个集合。这个合并收集器的名字很简单,就叫.teeing()
。这个方法的签名如下。
|
|
这里给出一个简单的使用示例。
|
|
在这个示例中,第一个Collector将被用来对所有的数据进行加和,第二个则用来计算Stream中元素的数量,最后的合并方法则是将两个Collector得到的结果进行进一步处理得到平均值。
压缩数字格式
压缩数字格式的意思就是使用2.9K
表示2900
,或者使用2.9 thousand
表示2900
之类的数字格式。但是需要注意,不同的Locale输出的数字格式是不一样的。压缩数字格式是在java.text.NumberFormat
类中提供的,可以使用静态方法.getCompactNumberFormatInstance()
获取,之后的操作便如NumberFormat
的其他实例一样了。
预览版功能
Java 12带来了一票预览版功能,但是这些功能默认是不能够使用的,如果要使用这些功能,需要在编译时使用选项--enable-preview
来启用。由于这些功能还处于预览版,所以在项目中并不建议启用,本文也暂时不再对其展开描述。
这些预览版功能有:
switch
现在可以使用新语法了,并且不再是一个语句,而是一个拥有值的表达式。instanceOf
操作符现在不仅可以断言类型,还可以在断言为真的时候直接声明一个完成了类型转换的变量。- 引入了一个实验性的GC:Shenandoah。