theme: orange
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情。
Java8于2014年3月18日发布,截止到2022年4月6日,当前最新发行版本是Java18。版本17、11和8是目前支持的长期支持(LTS)版本。这篇文章带领大家回顾从Java 8 开始每个版本的特性,小板凳坐好,发车了!想看上一篇文章,点击这儿面试反杀 | 请谈谈Java8-18引入的新特性(二)
Java 12 新特性
Compact Number Formatting
Java12带来了一个新的数字格式化程序—— CompactNumberFormat。它被设计成基于给定地区提供的模式,以较短的形式表示一个数字。
我们可以通过 NumberFormat 类中的 getCompactNumberInstance 方法获得它的实例:
public static NumberFormat getCompactNumberInstance(Locale locale, NumberFormat.Style formatStyle)
如前所述,locale 参数负责提供适当的格式模式。格式样式可以是 SHORT 或 LONG。为了更好地理解格式样式,让我们考虑一下美国地区的1000。SHORT 样式将格式化为“10K”,LONG 样式将格式化为“10000”。
现在让我们来看一个例子,“在文章中获得赞的数量”,然后使用两种不同的样式进行压缩:
@Test public void givenNumber_thenCompactValues() { NumberFormat likesShort = NumberFormat.getCompactNumberInstance(new Locale("en", "US"), NumberFormat.Style.SHORT); likesShort.setMaximumFractionDigits(2); assertEquals("2.59K", likesShort.format(2592)); NumberFormat likesLong = NumberFormat.getCompactNumberInstance(new Locale("en", "US"), NumberFormat.Style.LONG); likesLong.setMaximumFractionDigits(2); assertEquals("2.59 thousand", likesLong.format(2592)); }
pattern matching for instanceof
Java 12中引入的另一个预览功能是 instanceof 模式匹配。
在以前的 Java 版本中,当使用 if 语句和 instanceof 时,我们必须显式地对对象进行类型转换以访问其特性:
Object obj = "Hello World!"; if (obj instanceof String) { String s = (String) obj; int length = s.length(); }
使用 Java 12,我们可以直接在语句中声明这个新的类型化变量:
if (obj instanceof String s) { int length = s.length(); }
String Class New Methods
Java 12在 String 类中提供了两个新方法。
首先是字符串缩进根据整数参数调整每一行的缩进。如果参数大于零,则将在每行的开头插入新的空格。另一方面,如果参数小于零,则从每一行的请求中删除空格。如果给定行不包含足够的空白,则删除所有前导空白字符。
现在,让我们看一个基本的例子。首先,我们将文本缩进为四个空格,然后删除整个缩进:
String text = "Hello world!\nThis is Java."; text = text.indent(4); System.out.println(text); text = text.indent(-10); System.out.println(text);
输出如下:
Hello world! This is Java. Hello world! This is Java.
需要注意的是,即使我们通过了 value-10(超过了缩进计数) ,也只有空格受到影响,其它字符完好无损。
第二个新方法是变换,它接受一个单参数函数作为将应用于字符串的参数。
举一个简单的例子,让我们使用 transform 方法来还原字符串:
@Test public void givenString_thenRevertValue() { String text = "Baeldung"; String transformed = text.transform(value -> new StringBuilder(value).reverse().toString() ); assertEquals("gnudleaB", transformed); }
当然还有其它的新特性,包括但不限于:
- File::mismatch in the nio.file.Files utility class
- Teeing Collector
- Preview Changes
- JVM Changes
未完待续,下面继续讲各个版本的新特性,敬请期待!