在 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. Python基础之容易忘记的地方

    (1)编译型与解释型语言区别: 编译型:一次性,把所有代码编译成机器能识别的二进制码,再运行 代表语言:c,c++ 优点: 执行速度块 缺点: 开发速度慢,调试周期长 解释型:代码从上到下一行一行解释 ...

  2. OSPF 综合实验

    实验拓扑 实验需求 1.按照图示配置好 IP 地址,PC1 网关指向为 R8 2.OSPF 划分为 4 个区域,其中 192.168.0.0/24,192.168.1.0/24,192.168.2.0 ...

  3. springboot的logback的配置文件

    之前敲出来一个 logback 的配置文件,防止以后找起来麻烦在这里存个档 修改了日志输出的内容 设置默认级别为 INFO 正常日志 ( TRACE 到 WARN ) 输出到单独的文件夹 异常日志 ( ...

  4. Netty 框架学习 —— 第一个 Netty 应用

    概述 在本文,我们将编写一个基于 Netty 实现的客户端和服务端应用程序,相信通过学习该示例,一定能更全面的理解 Netty API 该图展示的是多个客户端同时连接到一台服务器.客户端建立一个连接后 ...

  5. Win64 驱动内核编程-10.突破WIN7的PatchGuard

    突破WIN7的PatchGuard WIN64 有两个内核保护机制,KPP 和 DSE.KPP 阻止我们 PATCH 内核,DSE 拦截我们加载驱动.当然 KPP 和 DSE 并不是不可战胜的,WIN ...

  6. Portswigger web security academy:OS command injection

    Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...

  7. SSM中事务的配置模板

    Spring-tx.xml 配置思路: 1. 声明事务管理器DataSourceTransactionManager,并注入数据源dataSource属性 2.配置事务增强<tx:advice& ...

  8. 解决上传文件大小限制 PHP+Apache

    1.设置Apache文件大小上传限制 http.conf文件(apache/config目录下)添加如下设置(1G=1024*1024*1024): FcgidMaxRequestLen  53687 ...

  9. sharding JDBC 不支持批量导入解决方法

    package com.ydmes.service.impl.log; import com.ydmes.domain.entity.log.BarTraceBackLog;import org.sp ...

  10. sql常识-RIGHT JOIN

    SQL RIGHT JOIN 关键字 RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行. RIGHT JOIN ...