Java8中Optional类型和Kotlin中可空类型的使用对比
程序员文章站
2024-02-28 18:01:52
本文主要给大家介绍了关于java8中optional类型和kotlin中可空类型使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:
在 jav...
本文主要给大家介绍了关于java8中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<string>
的意思,相比之下,哪个更简单?
一目了然。
还有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
本地下载地址:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。