Java8中Optional類型和Kotlin中可空類型的使用對比
本文主要給大家介紹了關于Java8中Optional類型和Kotlin中可空類型使用的相關內(nèi)容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:
在 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
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
Java中HashMap和Hashtable及HashSet的區(qū)別
以下是對Java中HashMap和Hashtable及HashSet的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下2013-09-09mybatis-generator自動生成dao、mapping、bean配置操作
這篇文章主要介紹了mybatis-generator自動生成dao、mapping、bean配置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Spring中property-placeholder的使用與解析詳解
本篇文章主要介紹了Spring中property-placeholder的使用與解析詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05SpringBoot中基于AOP和Semaphore實現(xiàn)API限流
調(diào)用速率限制是 Web API 中的常見要求,旨在防止濫用并確保公平使用資源,借助Spring Boot 中的 AOP,我們可以通過攔截方法調(diào)用并限制在特定時間范圍內(nèi)允許的請求數(shù)量來實現(xiàn)速率限制,需要的朋友可以參考下2024-10-10mybatis注解之@Mapper和@MapperScan的使用
這篇文章主要介紹了mybatis注解之@Mapper和@MapperScan的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10mybatisPlus如何使用MetaObjectHandler對字段進行更新
這篇文章主要介紹了mybatisPlus如何使用MetaObjectHandler對字段進行更新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04