在 Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的。

Scala 的 Option类型

  Scala在变量和函数返回值可能不会引用任何值的时候使用 Option 类型。在没有值的时候,使用 None,这是 Option 的一个子类。如果有值可以引用,就使用 Some 来包含这个值。Some 也是 Option 的子类。 None 被声明为一个对象,而不是一个类,因为我们只需要它的一个实例。这样,它多少有点像 null 关键字,但它却是一个实实在在的,有方法的对象。

scala> val mapDs = Map(5->"five", 6->"six", 10->"ten")
mapDs: scala.collection.immutable.Map[Int,String] = Map(5 -> five, 6 -> six, 10 -> ten) scala> mapDs get 5
res2: Option[String] = Some(five) scala> mapDs get 7
res3: Option[String] = None scala>

Option 有两个子类别,Some 和 None。当程序回传 Some 的时候,代表这个函式成功地给了你一个 String,而你可以透过 get() 函数拿到那个 String,如果程序返回的是 None,则代表没有字符串可以给你。

在返回 None,也就是没有 String 给你的时候,如果你还硬要调用 get() 来取得 String 的话,Scala 一样是会抛出一个 NoSuchElementException 异常给你的。

scala> val mapMixd = Map(5->"five", 6->"six", 10->"ten", "value"->77, 2->10)
mapMixd: scala.collection.immutable.Map[Any,Any] = Map(5 -> five, 10 -> ten, 6 -> six, 2 -> 10, value -> 77) scala> mapMixd get 2
res5: Option[Any] = Some(10) scala> mapMixd get 4
res6: Option[Any] = None

这时就用到另外一个方法 getOrElse。这个方法在这个 Option 是 Some 的实例时返回对应的值,而在是 None 的实例时返回传入的参数。换句话说,传入 getOrElse 的参数实际上是默认返回值。

scala> mapMixd get 4 getOrElse "no value"
res7: Any = no value scala> mapMixd get 2 getOrElse "no value"
res8: Any = 10
部分参考自  https://www.jianshu.com/p/95896d06a94d

转载 | Scala 如何避免使用 Null的更多相关文章

  1. scala(一)Nothing、Null、Unit、None 、null 、Nil理解

    相对于java的类型系统,scala无疑要复杂的多!也正是这复杂多变的类型系统才让OOP和FP完美的融合在了一起! Nothing: 如果直接在scala-library中搜索Nothing的话是找不 ...

  2. scala中nothing和null的区别

    1:nothing是所有类型的子类,他没有具体的实例对象,常见的应用:抛出异常.程序exit.无线循环等. 2:nothing是所有类型的子类,也是null的子类,nothing没有对象,但是可以用来 ...

  3. Scala不使用null 而使用Option,None,Some的好处

    刚接触Scala时就很奇怪, 为什么Java已经有null了,却偏偏还要弄出个None 后来依然我行我素在Scala里使用null, 结果就是经常被NullPointerException折磨得阴魂不 ...

  4. Scala Option类型

    转载自: Scala 初学者指南, 这里有一系列很棒的文章 类型 Option 可能你已经见过它在 Map API 中的使用:在实现自己的提取器时,我们也用过它, 然而,它还需要更多的解释. 你可能会 ...

  5. 学习Scala: 初学者应该了解的知识

    Scala开发参照清单 这里列出在开发一个Scala工程中需要参照的资料. 官网网站 http://www.scala-lang.org/ 文档网站 http://docs.scala-lang.or ...

  6. scala Option 里的 orNull orElse getOrElse 区别和使用

    Scala Option Scala Option类型用来表示一个值是可选的(有值或无值) Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some ...

  7. Scala中的空

    Scala的有即Any,Scala的无是Null,null,Nil,Nothing,None,Unit.那么这几种空有什么区别呢? 一.Null&null 很多人一辈子都没有走出这个无.Nul ...

  8. Scala学习笔记(三)类层级和特质

    无参方法 功能:将方法的定义转换为属性字段的定义: 作用范围:方法中没有参数,并且方法仅能通过读取所包含的对象属性去访问可变状态,而不改变可变状态,就可使用无参方法: 例子: abstract cla ...

  9. 快学Scala之继承

        ## 1. 继承 Scala语言通过 extends 关键字来继承类. 那么继承一个类有什么好处呢? 子类除了拥有继承自超类的方法和字段(即为val(常量), var(变量)所定义的), 还可 ...

随机推荐

  1. git merge --ff/--no-ff/--ff-only 三种选项参数的区别

    前言 git merge 应该是开发者最常用的 git 指令之一, 默认情况下你直接使用 git merge 命令,没有附加任何选项命令的话,那么应该是交给 git 来判断使用哪种 merge 模式, ...

  2. 1030 Travel Plan

    A traveler's map gives the distances between cities along the highways, together with the cost of ea ...

  3. 06- 移动端APP兼容性测试以及APP兼容性测试手机选择与云测试技术

    在开始测试APP之前,应该考虑什么问题?或者如何选择设备?多少部手机测试兼容性最佳? 兼容性测试手机数量:主测手机 1 ,2(根据人员),辅助测试手机:用于兼容性测试.(50-60台最佳,至少5-20 ...

  4. video播放视频以及相关事件

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  5. 【工具类】Stream流构建指定长度的时间集合

    package com.gabriel.stage.utils; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.Dat ...

  6. hdu4791水题

    题意:       打印东西,给你区间和每个区间的价格,然后输入任务张数,输出最少花费..    题解:       昨晚的小测试就有这个题目,当时蒙B了,怎么也读不懂题目,一直纠结怎么把150拆成1 ...

  7. 渗透测试神器Cobalt Strike的使用

    目录 Cobalt Strike Cobalt Strike的安装 Cobalt Strike的使用 创建监听器:

  8. PowerShell-6.文件操作

    1.显示文本内容 Get-Content "°C:\\Program Files (x86)\\PsUpdate\\b.dat" 2.得到b.dat文件内容,然后把里面的所有'C' ...

  9. Linux安装Redis报错`cc:命令未找到`

    缺少gcc和gcc-c++的编译环境,安装即可. 可以联网情况下使用命令 yum install gcc yum install gcc-c++ 然后清理原来的残余文件 make distclean ...

  10. 【我给面试官画饼】Python自动化测试面试题精讲

    那今天给家分享的是一个面试主题. 就比如说我们的自动化测试,自动化如何去应对面试官,和面试官去聊一聊自动化的心得,自动化你现在去面试的时候是一个非常重要的一个关键点,所以如果你在这方面有一定的心得.那 ...