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

2021-02-2422:00:22编程语言入门到精通Comments1,281 views字数 874阅读模式

Java 8中,我们可以使用 Optional 类型来表达可空的类型。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

package com.easy.kotlin;

import java.util.Optional;

import static java.lang.System.out;

/**
 * Nullable - 允许传递为 null 参数
 *  - 如果传递的参数是 null,抛出异常 NullPointerException
 * Optional<String> b = (s);
 */
public class Java8OptionalDemo {

 public static void main(String[] args) {
 (strLength(("abc")));
 (strLength(Nullable(null)));
 }

 static Integer strLength(Optional<String> s) {
 return s.orElse("").length();
 }
}

运行输出:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

3
0

但是,这样的代码,依然不是那么地优雅。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

针对这方面 Groovy 提供了一种安全的属性/方法访问操作符 ?.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

user?.getUsername()?.toUpperCase();

Swift 也有类似的语法, 只作用在 Optional 的类型上。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

Kotlin 中的可空类型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

上面 Java 8的例子,用 Kotlin 来写就显得更加简单优雅了:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

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>的意思,相比之下,哪个更简单?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

一目了然。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

还有Java 8 Optional 提供的orElse文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

s.orElse("").length();

这个东东,在 Kotlin 是最最常见不过的 Elvis 运算符了:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

s?.length ?: 0

相比之下,还有什么理由继续用 Java 8 的 Optional 呢?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/20985.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/20985.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定