Java 8中的Optional 類型與 Kotlin 中的可空類型
Java 8中的Optional 類型與 Kotlin 中的可空類型
在 Java 8中,我們可以使用 Optional 類型來表達可空的類型。
package com.easy.kotlin;
import java.util.Optional;
import static java.lang.System.out;
/**
* Optional.ofNullable - 允許傳遞為 null 參數
* Optional.of - 如果傳遞的參數是 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
但是,這樣的代碼,依然不是那麼地優雅。
針對這方麵 Groovy 提供了一種安全的屬性/方法訪問操作符 ?.
user?.getUsername()?.toUpperCase();
Swift 也有類似的語法, 隻作用在 Optional 的類型上。
Kotlin 中的可空類型
上麵 Java 8的例子,用 Kotlin 來寫就顯得更加簡單優雅了:
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的意思,相比之下,哪個更簡單?
一目了然。
還有Java 8 Optional 提供的orElse
s.orElse("").length();
這個東東,在 Kotlin 是最最常見不過的 Elvis 運算符了:
s?.length ?: 0
相比之下,還有什麼理由繼續用 Java 8 的 Optional 呢?
Kotlin 中的明星符號
??????????????????????????????????????
?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?:
?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?.
示例源代碼工程Github 地址:
https://github.com/EasyKotlin/java_optional_vs_kotlin_nullable_type
最新上架!!!
《 Kotlin極簡教程》 陳光劍 (機械工業出版社):
https://mp.weixin.qq.com/s/bzRkGSO6T1O2AELM_UqKUQ
可直接打開京東,淘寶,當當===> 搜索: Kotlin 極簡教程
最後更新:2017-09-14 09:33:19