首页 > 其他分享 >Scala-Option使用

Scala-Option使用

时间:2023-03-07 18:35:09浏览次数:40  
标签:None Option val Scala Some value 使用 null

最近进行代码ShowCode,发现不少null值处理的场景,比如赋初始值或者判断非空。还在使用Java中方式,没有使用更简便的Scala-Option进行包装。

Option可以理解为类型容器,通过安全的方式进行方法调用。

Scala中的Option其实在Java中也有类似实现,比如Guava的Optional也大同小异。

这是Option类的定义,它有两个子类:Some 和 None。

img

常用方法:

isEmpty;

get;

getOrElse;

当然还有map、filter等类似集合的方法,所以Option也能当集合来用。

先来了解下Some和None,一个表示有值,一个表示不存在的值。

#Option vs Some
val a = Option("hello")
val b = Some("hello")
a == b //true

#Option vs None
val a = Option("hello")
val b = None
a == b //false

#Option(null) vs None
val a = Option(null)
val b = None
a == b //true

#Some(null) vs None
val a = Some(null)
val b = None
a == b //warn
a.get == b //false

#Some(null).get vs None
val a = Some(null).get
val b = None
a == b //false


#Option(null) vs Some(null)
val a = Option(null)
val b = Some(null)
a == b //false

val a:Option[String] = None
a.getOrElse("empty value") //"empty value"

那么使用Option能帮我们解决什么问题呢。以实际场景举例:

  1. 避免空指针;
  2. 变量赋初始值;
  3. 模式匹配;

比如调用第三方库,每次都要对返回值进行非空判断,可以这样写:

val c = Option(java.lang.Boolean.valueOf(false))
c.isEmpty
//res12: Boolean = false

如果想在为空时给个初始值

val d = Option(null).getOrElse("default value")
d: String = default value

模式匹配也可以

val e = Option(10)
e match {
   case Some(_) => println(s"e=${e.get}")
   case None => println("empty value")
}
//e=10

val f = Option(null)
f match {
   case Some(_) => println(s"e=${e.get}")
   case None => println("empty value")
}
//empty value

总结

使用Option能节省不少在赋值、判断场景下的代码量,不用再担心非安全调用的空指针异常。

标签:None,Option,val,Scala,Some,value,使用,null
From: https://www.cnblogs.com/panshan-lurenjia/p/17121034.html

相关文章

  • jira使用记录小窍门
    可以将subtask直接转换成task不用再新建一个task,选择右上角的三个点操作  转换完之后之前链接的所有的task都会被取消所以得重新链接 ......
  • api接口使用MD5加密加盐签名校验
    最近一个A系统需要向B系统推送数据,因为数据每天不一定有多少,有时候多有时候少,且由UGC生成,需要B系统做一些处理,用mq比较麻烦,且公司用的付费rocketmq。除了重要数据一般不使......
  • 使用NineData构建任意时间点(PITR)数据恢复能力
    在当前数字化经济的时代下,数据成为企业的关键资产。但因数据误删、服务器故障、入侵等原因导致数据丢失影响业务,会对公司造成重大损失,所以如何保证数据资产的安全、稳定及可......
  • 360安全浏览器使用IE7内核打开网站的设置方法
    1、首先打开电脑中的360安全浏览器,在浏览器右上角可以看到一个由三条横线组成“打开菜单”图标,使用鼠标点击该图标2、点击之后后弹出360安全浏览器的菜单窗口,在窗口中点......
  • 如何使用“pv”命令监控(复制/备份/压缩)数据的进度
    概述在Linux系统上进行备份和复制/移动大文件时,您可能希望监视正在进行的进度。许多终端工具没有允许您在管道中运行命令时查看进度信息的功能。在本文中,我们将了解一个......
  • 阿里云与 Kubecost 合作,容器服务 ACK 支持使用 Kubecost 进行成本管理
    我们很高兴地宣布,阿里云已经与Kubecost展开合作,将持续推动Kubecost对阿里云的集成,完善Kubecost在阿里云FinOps方面的能力。目前Kubecost已经支持了对阿里云ACK......
  • 使用Mycat构建MySQL读写分离、主从复制、主从高可用
    数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。 从数据库的角度来说,对于大多数应用来说,从集中到分布,最基本的一个需求不是数据存......
  • k8s-Volume使用说明
    Volume常用的几种卷: 1.emptyDir:本地临时卷: 2.hostPath:本地卷 3.NFS:共享卷 4.configmap:配置文件emptyDir:当Pod被分配给节点时,首先创建emptyDir卷......
  • windows下使用nginx + waitress 部署django
    虽然不喜欢IIS,不过有些项目又必须部署在windows上,windows下部署django的方案有IIS+wfastcgi,apache+mod_wsgi,也有超简单的部署方式如:nginx+waitress,本文主要讲的是最......
  • IDEA的使用及优化
    IDEA的使用及优化一、IDEA安装傻瓜式安装(https://www.jetbrains.com/idea/)IDEA优化1、方法分割线1、打开设置Settings...2、Editor-->General-->Appearanc......