首页 Java java教程 Java8中Optional与Kotlin中可空类型的使用对比详情

Java8中Optional与Kotlin中可空类型的使用对比详情

Sep 19, 2017 am 10:15 AM
java8 kotlin optional

这篇文章主要给大家介绍了关于Java8中Optional类型和Kotlin中可空类型的使用对比,文中通过示例代码给大家介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

本文主要给大家介绍了关于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 中的明星符号


??????????????????????????????????????
?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: 
?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?.
登录后复制

以上是Java8中Optional与Kotlin中可空类型的使用对比详情的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用Vue.js和Kotlin语言开发安卓应用的一些技巧 使用Vue.js和Kotlin语言开发安卓应用的一些技巧 Jul 31, 2023 pm 02:17 PM

使用Vue.js和Kotlin语言开发安卓应用的一些技巧随着移动应用的普及和用户需求的不断增长,安卓应用的开发越来越受到开发者的关注。在开发安卓应用时,选择合适的技术栈至关重要。近年来,Vue.js和Kotlin语言逐渐成为安卓应用开发的热门选择。本文将介绍使用Vue.js和Kotlin语言开发安卓应用的一些技巧,并给出相应的代码示例。一、搭建开发环境在开始

Java 8中如何计算一年前或一年后的日期? Java 8中如何计算一年前或一年后的日期? Apr 26, 2023 am 09:22 AM

Java8计算一年前或一年后的日期利用minus()方法计算一年前的日期packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[]args){LocalDatetoday=LocalDate.now();LocalDatepreviousYear=today.minus(1,ChronoUni

如何在 Debian 上安装 Kotlin 编程语言 12 如何在 Debian 上安装 Kotlin 编程语言 12 Feb 20, 2024 am 09:42 AM

Kotlin是一种静态类型编程语言,已经在软件开发领域引起了巨大的关注。它简洁易懂的语法、与Java的良好兼容性以及丰富的工具支持,为开发人员提供了许多优势,因此许多开发者都选择Kotlin作为他们的首选语言。在Debian上安装Kotlin编程语言12Bookworm步骤1。首先更新现有系统包。打开终端并输入以下命令:sudoaptupdatesudoaptupgrade这些命令将获取可用更新列表并升级当前程序包,从而确保您的系统是最新的。第2步。安装Java。Kotlin在Java虚拟机(J

Java函数与Kotlin语言函数的区别? Java函数与Kotlin语言函数的区别? Apr 24, 2024 am 08:24 AM

Java和Kotlin函数的区别:语法:Java函数需要明确参数类型和名称,而Kotlin可以省略类型并使用lambda表达式;参数:Kotlin可以使用更简洁的语法省略参数类型;返回值:Kotlin可以省略返回值类型,默认为Unit;扩展函数:Kotlin可以为现有类添加新函数,而Java需要通过继承实现类似功能;实例方法调用:Kotlin可以省略对象名,使用更简洁的语法。

如何利用Redis和Kotlin开发异步任务队列功能 如何利用Redis和Kotlin开发异步任务队列功能 Sep 21, 2023 am 10:58 AM

如何利用Redis和Kotlin开发异步任务队列功能引言:随着互联网的发展,异步任务的处理变得越来越重要。在开发过程中,经常会遇到一些需要耗时的任务,例如发送邮件、处理大数据等等。为了提高系统的性能和可伸缩性,我们可以使用异步任务队列来处理这些任务。本文将介绍如何利用Redis和Kotlin来开发一个简单的异步任务队列,并提供具体的代码示例。一、什么是异步任

如何使用Java 8计算一周后的日期? 如何使用Java 8计算一周后的日期? Apr 21, 2023 pm 11:01 PM

Java8如何计算一周后的日期这个例子会计算一周后的日期。LocalDate日期不包含时间信息,它的plus()方法用来增加天、周、月,ChronoUnit类声明了这些时间单位。由于LocalDate也是不变类型,返回后一定要用变量赋值。packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo08{publicstaticvoidmain(String[

Java中的Optional常用方法有哪些 Java中的Optional常用方法有哪些 May 09, 2023 am 11:34 AM

前言Java中的Optional是一个容器对象,它可以包含一个非空值,也可以为空。它的主要作用是在编写代码时避免空指针异常。java8中Optional的完整用法如下:1.创建Optional对象可以通过of()方法创建一个包含非空值的Optional对象,例如:Optionaloptional=Optional.of("value");也可以通过ofNullable()方法创建一个包含可能为空的值的Optional对象,例如:Optionaloptional=Optiona

如何使用Redis和Kotlin开发分布式队列功能 如何使用Redis和Kotlin开发分布式队列功能 Sep 20, 2023 am 10:09 AM

如何使用Redis和Kotlin开发分布式队列功能引言:随着互联网的迅速发展,分布式系统越来越受到关注。分布式队列是分布式系统的重要组成部分之一,能够实现消息的异步处理和解耦。本文将介绍如何使用Redis和Kotlin开发一个简单的分布式队列,并提供具体的代码示例。一、概述分布式队列能够实现消息的发布和消费,并确保消息不会丢失。在分布式系统中,消息的发布和消

See all articles