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

在 Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的. Scala 的 Option类型 Scala在变量和函数返回值可能不会引用任何值的时候使用 Option 类型.在没有值的时候,使用 None,这是 Option 的一个子类.如果有值可以引用,就使用 Some 来包含这个值.Some 也是 Option 的子类. None 被声明为一个对象,而不是一个类,因为我们只需要它的一个实例.这样,它多少有点像 null 关键字,但它却是一个实实在在的,有方法的对象…
相对于java的类型系统,scala无疑要复杂的多!也正是这复杂多变的类型系统才让OOP和FP完美的融合在了一起! Nothing: 如果直接在scala-library中搜索Nothing的话是找不到了,只能发现一个Nothing$的类(后面再说Nothing$和Nothing的关系).要想看到Nothing.scala的源码需要去github上的scala源码中查找Nothing源码 可以看到在Nothing.scala中只是定义了一个sealed trait: package scala…
1:nothing是所有类型的子类,他没有具体的实例对象,常见的应用:抛出异常.程序exit.无线循环等. 2:nothing是所有类型的子类,也是null的子类,nothing没有对象,但是可以用来定义类型,如方法抛出异常的返回值类型就是nothing. 3:null是所有引用类型的子类,他只是一个实例对象null,主要用来和其他的JVM语言进行相互操作.…
刚接触Scala时就很奇怪, 为什么Java已经有null了,却偏偏还要弄出个None 后来依然我行我素在Scala里使用null, 结果就是经常被NullPointerException折磨得阴魂不散...于是终于领悟. WHY? 举个例子: 假设有一个简单的对象A, A类里有2个Int属性, a和b case class A(val a : Int, val b : Int) 然后有这么一个map val map1 = Map(1 -> A(111, 1111), 2 -> A(222,…
转载自: Scala 初学者指南, 这里有一系列很棒的文章 类型 Option 可能你已经见过它在 Map API 中的使用:在实现自己的提取器时,我们也用过它, 然而,它还需要更多的解释. 你可能会想知道它到底解决什么问题,为什么用它来处理缺失值要比其他方法好, 而且可能你还不知道该怎么在你的代码中使用它. 这一章的目的就是消除这些问号,并教授你作为一个新手所应该了解的 Option 知识. Scala 语言中包含一个标准类型 Option[A] 类型, Option[A] 是一个类型为 A…
Scala开发参照清单 这里列出在开发一个Scala工程中需要参照的资料. 官网网站 http://www.scala-lang.org/ 文档网站 http://docs.scala-lang.org/index.html Cheatsheet http://docs.scala-lang.org/cheatsheets/ 代码风格 http://docs.scala-lang.org/style/ 设计模式 https://wiki.scala-lang.org/display/SYGN/D…
Scala Option Scala Option类型用来表示一个值是可选的(有值或无值) Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some[T] 如果不存在, Option[T] 就是对象 None Option.orNull 参数:没有(当属性用) 返回:如果Option不为None返回Some的值否则返回null 例一:返回Some的值 scala> val v = Some("Hello Option") v:…
Scala的有即Any,Scala的无是Null,null,Nil,Nothing,None,Unit.那么这几种空有什么区别呢? 一.Null&null 很多人一辈子都没有走出这个无.Null是一个Trait,你不能创建她它的实例.但是Scala在语言层面上存在一个Null的实例,那就是null.Java中的null意味着引用并没有指向任何对象.但存在一个悖论,一切都是对象,那没有对象是不是也是对象呢?Scala定义了一个类似于对象语义的Null,和一个值语义的null.这样面向对象在空引用的…
无参方法 功能:将方法的定义转换为属性字段的定义: 作用范围:方法中没有参数,并且方法仅能通过读取所包含的对象属性去访问可变状态,而不改变可变状态,就可使用无参方法: 例子: abstract class Element{     def texts:String } class Sub1Element(text:String) extends Element{     val texts:String = text } object RunApplication{     def main(a…
    ## 1. 继承 Scala语言通过 extends 关键字来继承类. 那么继承一个类有什么好处呢? 子类除了拥有继承自超类的方法和字段(即为val(常量), var(变量)所定义的), 还可以添加自己需要的新方法和新字段, 而且不但可以重写(override)超类的方法, 还可以重写超类的`字段`. ### final 关键字 在Scala中, 不仅可以将类声明为final, 而且可以将字段和方法声明为final 当类被声明为final时, 类不可以被继承; 当方法和字段被声明为fin…