服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - JAVA教程 - Java8中Optional类型和Kotlin中可空类型的使用对比

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

2021-01-05 11:00KotinChina编程社区 JAVA教程

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

本文主要给大家介绍了关于Java8Optional类型和Kotlin中可空类型使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

在 Java 8中,我们可以使用 Optional 类型来表达可空的类型。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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();
 }
}

运行输出:

?
1
2
3
0

但是,这样的代码,依然不是那么地优雅。

针对这方面 Groovy 提供了一种安全的属性/方法访问操作符 ?.

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

Swift 也有类似的语法, 只作用在 Optional 的类型上。

Kotlin 中的可空类型

上面 Java 8的例子,用 Kotlin 来写就显得更加简单优雅了:

?
1
2
3
4
5
6
7
8
9
10
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

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

这个东东,在 Kotlin 是最最常见不过的 Elvis 运算符了:

?
1
s?.length ?: 0

相比之下,还有什么理由继续用 Java 8 的 Optional 呢?

Kotlin 中的明星符号

?
1
2
3
??????????????????????????????????????
?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?: ?:
?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?. ?.

示例源代码工程Github 地址:

https://github.com/EasyKotlin/java_optional_vs_kotlin_nullable_type

总结

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

原文链接:http://www.jianshu.com/p/515244085e8e

延伸 · 阅读

精彩推荐
  • JAVA教程java实现简单扑克牌游戏

    java实现简单扑克牌游戏

    这篇文章主要为大家详细介绍了java实现简单扑克牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    sherry.*3652020-09-23
  • JAVA教程Mybatis多参数及实体对象传递实例讲解

    Mybatis多参数及实体对象传递实例讲解

    在使用Mybatis的时候,经常会有各种各样的参数传递,不同类型,不同个数的参数,下面小编通过例子给大家讲解下Mybatis多参数及实体对象传递,一起看看...

    molashaonian3802020-07-18
  • JAVA教程Spring MVC拦截器_动力节点Java学院整理

    Spring MVC拦截器_动力节点Java学院整理

    Spring MVC的拦截器,是属于HandlerMapping级别的,可以有多个HandlerMapping ,每个HandlerMapping可以有自己的拦截器,具体内容详情大家通过本文学习吧...

    动力节点1512020-12-23
  • JAVA教程springmvc常用注解标签详解

    springmvc常用注解标签详解

    本篇文章主要介绍了springmvc常用注解标签详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    木叔3632020-11-26
  • JAVA教程java基于servlet实现文件上传功能解析

    java基于servlet实现文件上传功能解析

    这篇文章主要为大家详细介绍了java基于servlet实现上传功能,后台使用java实现,前端主要是js的ajax实现,感兴趣的小伙伴们可以参考一下 ...

    fonely__2012020-05-04
  • JAVA教程Java实现仿微信红包分配规则

    Java实现仿微信红包分配规则

    这篇文章主要为大家详细介绍了Java实现仿微信红包分配规则,介绍一种随机红包分配策略,感兴趣的小伙伴们可以参考一下 ...

    xiaojimanman2112020-04-03
  • JAVA教程jdk自带定时器使用方法详解

    jdk自带定时器使用方法详解

    这篇文章主要为大家详细介绍了jdk自带定时器的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    ToBeABetterPerson4062020-11-25
  • JAVA教程java web过滤器处理乱码

    java web过滤器处理乱码

    本文主要介绍了java web过滤器处理乱码的方法解析。具有很好的参考价值。下面跟着小编一起来看下吧...

    甄情4162020-09-07