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

作者:KotinChina编程社区 时间:2023-07-29 07:49:21 

本文主要给大家介绍了关于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

本地下载地址:

http://xiazai.jb51.net/201709/yuanma/java_optional_vs_kotlin(jb51.net).rar

来源:http://www.jianshu.com/p/515244085e8e

标签:java8,optional,kotlin
0
投稿

猜你喜欢

  • SpringCloud全面解析@FeignClient标识接口的过程

    2023-08-05 12:34:44
  • java编程枚举类型那些事!枚举类型定义和重写枚举的方法

    2021-11-19 18:31:15
  • 初步认识C#中的Lambda表达式和匿名方法

    2023-07-03 00:23:28
  • SpringBoot整合Mybatis的知识点汇总

    2023-11-15 21:56:06
  • C#实现一键换IP、重置DNS、网关及掩码的方法

    2021-10-03 00:32:33
  • Spring Boot实现分布式锁的自动释放的示例代码

    2023-10-17 11:06:24
  • WindowsForm实现TextBox占位符Placeholder提示功能

    2023-03-18 12:57:44
  • java基础javeSE程序逻辑控制语法

    2022-09-21 23:41:47
  • java统计字符串中指定元素出现次数方法

    2022-11-02 16:05:40
  • Spring Cloud详解实现声明式微服务调用OpenFeign方法

    2021-07-04 07:56:41
  • Unity3D实现甜品消消乐游戏

    2022-11-06 16:26:24
  • 纯Java代码实现流星划过天空

    2022-06-01 12:12:35
  • 使用AccessibilityService实现自动遍历点赞功能

    2023-10-18 16:22:53
  • Spring使用ThreadPoolTaskExecutor自定义线程池及异步调用方式

    2022-07-22 21:53:32
  • 基于Android平台实现拼图小游戏

    2021-07-27 16:48:12
  • AOP之事务管理<aop:advisor>的两种配置方式

    2023-11-24 22:55:06
  • 详解Java实现单例的五种方式

    2021-06-11 03:54:03
  • 用intellij Idea加载eclipse的maven项目全流程(图文)

    2021-09-12 06:11:16
  • C#判断页面中的多个文本框输入值是否有重复的实现方法

    2022-10-30 19:41:56
  • Android 吸入动画效果实现分解

    2021-10-24 16:55:28
  • asp之家 软件编程 m.aspxhome.com