Java8中Optional類型和Kotlin中可空類型的使用對比
本文主要給大家介紹了關(guān)于Java8中Optional類型和Kotlin中可空類型使用的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹:
在 Java 8中,我們可以使用 Optional 類型來表達(dá)可空的類型。
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(); } }
運(yùn)行輸出:
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? 同樣表達(dá)了 Optional<String>
的意思,相比之下,哪個更簡單?
一目了然。
還有Java 8 Optional 提供的orElse
s.orElse("").length();
這個東東,在 Kotlin 是最最常見不過的 Elvis 運(yùn)算符了:
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
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Java中HashMap和Hashtable及HashSet的區(qū)別
以下是對Java中HashMap和Hashtable及HashSet的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-09-09mybatis-generator自動生成dao、mapping、bean配置操作
這篇文章主要介紹了mybatis-generator自動生成dao、mapping、bean配置操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08java使用DOM4J對XML文件進(jìn)行增刪改查操作
這篇文章主要為大家詳細(xì)介紹了java使用DOM4J對XML文件進(jìn)行增刪改查操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Spring中property-placeholder的使用與解析詳解
本篇文章主要介紹了Spring中property-placeholder的使用與解析詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05SpringBoot中基于AOP和Semaphore實(shí)現(xiàn)API限流
調(diào)用速率限制是 Web API 中的常見要求,旨在防止濫用并確保公平使用資源,借助Spring Boot 中的 AOP,我們可以通過攔截方法調(diào)用并限制在特定時(shí)間范圍內(nèi)允許的請求數(shù)量來實(shí)現(xiàn)速率限制,需要的朋友可以參考下2024-10-10mybatis注解之@Mapper和@MapperScan的使用
這篇文章主要介紹了mybatis注解之@Mapper和@MapperScan的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java?web實(shí)現(xiàn)頭像上傳以及讀取顯示
這篇文章主要為大家詳細(xì)介紹了Java?web實(shí)現(xiàn)頭像上傳以及讀取顯示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06mybatisPlus如何使用MetaObjectHandler對字段進(jìn)行更新
這篇文章主要介紹了mybatisPlus如何使用MetaObjectHandler對字段進(jìn)行更新問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04