前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 8中的Optional 类型与 Kotlin 中的可空类型Java 8中的Optional 类型与 Kotlin 中的可空类型Kotlin 中的可空类型《Kotlin极简教程》正式上架:

Java 8中的Optional 类型与 Kotlin 中的可空类型Java 8中的Optional 类型与 Kotlin 中的可空类型Kotlin 中的可空类型《Kotlin极简教程》正式上架:

作者头像
一个会写诗的程序员
发布2018-08-17 14:50:46
2.6K0
发布2018-08-17 14:50:46
举报

Java 8中的Optional 类型与 Kotlin 中的可空类型

在 Java 8中,我们可以使用 Optional 类型来表达可空的类型。

代码语言:javascript
复制
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();
    }
}

运行输出:

代码语言:javascript
复制
3
0

但是,这样的代码,依然不是那么地优雅。

针对这方面 Groovy 提供了一种安全的属性/方法访问操作符 ?.

代码语言:javascript
复制
user?.getUsername()?.toUpperCase();

Swift 也有类似的语法, 只作用在 Optional 的类型上。

Kotlin 中的可空类型

上面 Java 8的例子,用 Kotlin 来写就显得更加简单优雅了:

代码语言:javascript
复制
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

代码语言:javascript
复制
s.orElse("").length();

这个东东,在 Kotlin 是最最常见不过的 Elvis 运算符了:

代码语言:javascript
复制
s?.length ?: 0

相比之下,还有什么理由继续用 Java 8 的 Optional 呢?

Kotlin 中的明星符号

代码语言:javascript
复制
??????????????????????????????????????
?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: 
?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. 

示例源代码工程Github 地址:

https://github.com/EasyKotlin/java_optional_vs_kotlin_nullable_type

非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.09.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java 8中的Optional 类型与 Kotlin 中的可空类型
  • Kotlin 中的可空类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档