在这篇文章中,我将描述自 Java8 依赖对开发者来说最重要也最友好的特性,之所以选择 Java8 ,那是因为它依然是目前使用最多的版本。
Switch 表达式 (JDK 12)
使用 switch 表达式,你可以定义多个 case 条件,并使用箭头 ->
符号返回值,这个特性在 JDK12 之后启用,它使得 switch 表达式更容易理解了。
|
|
在 JDK12 之前,同样的例子要复杂的多:
|
|
文本块 (JDK 13)
文本块是一个多行字符串,可以避免使用转移字符;从 Java13 之后它成为了预览特性,使用 """
符号定义。接下来看看使用它声明一个 JSON 字符串有多简单。
|
|
Java13 之前的版本:
|
|
新的 Optional Methods (JDK 9/ JDK 10)
Java 9/10 版本之后新增了几种可选方法,有意思的是这两个:
orElseThrow
ifPresentOrElse
使用 orElseThrow
当数据不存在时你能抛出 NoSuchElementException
异常,相反会返回数据。
|
|
正因为如此,可以避免在 isPresent 中使用 if 条件。
|
|
第二个有趣的方法是 ifPresentOrElse
,当数据存在时,会执行带数据参数的函数,相反会执行参数为空的函数。
|
|
在 Java8 中,你需要在 isPresent 方法中使用 if else 语句。
集合工厂方法(JDK 9)
使用 Java9 中的集合工厂方法可以简单的使用预定义数据创建不可变集合。
|
|
在 Java9 之前,你可以使用 Collections ,但肯定是更复杂:
|
|
Records (JDK 14)
使用 Records
你可以定义一个不可变、只能访问数据(只有 getter 方法) 的类,它可以自动创建 toString,equals,hashcode
方法。
|
|
以下效果与 Records
类似:
接口中的私有方法 (JDK 9)
从 Java8 之后你就可以为接口创建默认方法,但从 Java9 的私有方法你就能充分使用该特性:
|
|
局部变量类型推导 (JDK 10 / JDK 11)
从 Java10 之后你就能使用局部变量类型推导了,只需要使用 var 关键字来代替具体类型;在 Java11 之后你就能在 lambda 表达式中使用类型推导了。
|
|