Java8中Optional類型和Kotlin中可空類型的使用對比
本文主要給大家介紹了關于Java8中Optional類型和Kotlin中可空類型使用的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:
在 Java 8中,我們可以使用 Optional 類型來表達可空的類型。
package com.easy.kotlin;
import java.util.Optional;
import static java.lang.System.out;
/**
* Optional.ofNullable - 允許傳遞為 null 參數(shù)
* Optional.of - 如果傳遞的參數(shù)是 null,拋出異常 NullPointerException
* Optional<String> b = Optional.of(s);
*/
public class Java8OptionalDemo {
public static void main(String[] args) {
out.println(strLength(Optional.of("abc")));
out.println(strLength(Optional.ofNullable(null)));
}
static Integer strLength(Optional<String> s) {
return s.orElse("").length();
}
}
運行輸出:
3 0
但是,這樣的代碼,依然不是那么地優(yōu)雅。
針對這方面 Groovy 提供了一種安全的屬性/方法訪問操作符 ?.
user?.getUsername()?.toUpperCase();
Swift 也有類似的語法, 只作用在 Optional 的類型上。
Kotlin 中的可空類型
上面 Java 8的例子,用 Kotlin 來寫就顯得更加簡單優(yōu)雅了:
package com.easy.kotlin
fun main(args: Array<String>) {
println(strLength(null))
println(strLength("abc"))
}
fun strLength(s: String?): Int {
return s?.length ?: 0
}
其中,我們使用 String? 同樣表達了 Optional<String>的意思,相比之下,哪個更簡單?
一目了然。
還有Java 8 Optional 提供的orElse
s.orElse("").length();
這個東東,在 Kotlin 是最最常見不過的 Elvis 運算符了:
s?.length ?: 0
相比之下,還有什么理由繼續(xù)用 Java 8 的 Optional 呢?
Kotlin 中的明星符號
?????????????????????????????????????? ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?.
示例源代碼工程Github 地址:
https://github.com/EasyKotlin/java_optional_vs_kotlin_nullable_type
本地下載地址:
http://xiazai.jb51.net/201709/yuanma/java_optional_vs_kotlin(jb51.net).rar
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
Java如何使用Optional與Stream取代if判空邏輯(JDK8以上)
這篇文章主要給大家介紹了關于Java如何使用Optional與Stream取代if判空邏輯(JDK8以上)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-09-09
Spring+MyBatis多數(shù)據(jù)源配置實現(xiàn)示例
本篇文章主要介紹了Spring+MyBatis多數(shù)據(jù)源配置實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
SpringBoot?+?MyBatis-Plus構建樹形結構的幾種方式
在實際開發(fā)中,很多數(shù)據(jù)都是樹形結構,本文主要介紹了SpringBoot?+?MyBatis-Plus構建樹形結構的幾種方式,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-08-08
解決mybatisplus MetaObjectHandler 失效的問題
本文主要介紹了解決mybatisplus MetaObjectHandler 失效的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02

