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