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

发布时间 - 2026-01-11 03:17:48    点击率:

本文主要给大家介绍了关于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./201709/yuanma/java_optional_vs_kotlin().rar

总结

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


# java8  # optional  # optional使用  # kotlin  # 可空类型  # 利用Java8 Optional类优雅如何地解决空指针问题  # Java8新特性之空指针异常的克星Optional类的实现  # Java8中Optional类的使用说明  # 相比之下  # 也有  # 本地下载  # 相关内容  # 说了  # 不多  # 给大家  # 可以使用  # 这篇文章  # 谢谢大家  # 用在  # 抛出  # 源代码  # 来写  # 只作  # 运算符  # 就显得  # 有疑问  # util  # static 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  如何在阿里云服务器自主搭建网站?  Bootstrap CSS布局之列表  成都网站制作公司哪家好,四川省职工服务网是做什么用?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Laravel如何使用Gate和Policy进行授权?(权限控制)  使用spring连接及操作mongodb3.0实例  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Internet Explorer官网直接进入 IE浏览器在线体验版网址  魔方云NAT建站如何实现端口转发?  如何快速搭建自助建站会员专属系统?  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  如何在阿里云购买域名并搭建网站?  非常酷的网站设计制作软件,酷培ai教育官方网站?  *服务器网站为何频现安全漏洞?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  如何在建站主机中优化服务器配置?  Laravel如何创建自定义中间件?(Middleware代码示例)  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  JavaScript Ajax实现异步通信  如何实现建站之星域名转发设置?  免费视频制作网站,更新又快又好的免费电影网站?  如何在橙子建站上传落地页?操作指南详解  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  php485函数参数是什么意思_php485各参数详细说明【介绍】  公司网站制作需要多少钱,找人做公司网站需要多少钱?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  深圳网站制作的公司有哪些,dido官方网站?  javascript基于原型链的继承及call和apply函数用法分析  如何用低价快速搭建高质量网站?  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何在腾讯云服务器上快速搭建个人网站?  米侠浏览器网页背景异常怎么办 米侠显示修复  如何获取上海专业网站定制建站电话?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel如何创建自定义Artisan命令?(代码示例)  高性能网站服务器部署指南:稳定运行与安全配置优化方案  简历在线制作网站免费版,如何创建个人简历?  如何用AWS免费套餐快速搭建高效网站?  PythonWeb开发入门教程_Flask快速构建Web应用