欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java8中Optional类型和Kotlin中可空类型的使用对比

程序员文章站 2024-03-01 12:25:16
本文主要给大家介绍了关于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

本地下载地址:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。