scala学习笔记四——null,None,Some,Optio

2019-09-29  本文已影响0人  对方正在输出_ace

1.null

null代表无值,但是这种无值经常会发生各种bug。

2.Option,Some,None

Option是一个抽象类,它含有两个具体的子类,分别是Some和None。其中,Some代表有值,None代表无值。
使用Option的好处是,它代表可能有值,也可能无值,但是返回None会相对更安全一些。
Scala 推荐使用Option类型。

    val a=Map("1"->"hello","2"->"scala")
    println(a.get("1"))
    println(a.get("3"))

a.get("1")返回的是一个some类型。
a.get("3")返回的是一个None类型。

Some(hello)
None

再来和Null对比一下安全性。

    println(None.toString)
    println(null.toString)

第一个程序可以正常运行,第二个则会抛出NullPointerException的异常。
当返回的是Optopn类型时,我们要获得具体的值,可以继续使用get方法,但是此时为None值时,会有异常。

    val a=Map("1"->"hello","2"->"scala")
    println(a.get("1").get)
    println(a.get("3").get)

执行结果为:

hello
Exception in thread "main" java.util.NoSuchElementException: None.get
...

所以在使用的时候可以用更安全的方式getOElse来获取Option对象的值。

    val a=Map("1"->"hello","2"->"scala")
    println(a.get("1").getOrElse("none"))
    println(a.get("3").getOrElse("none"))

执行结果为:

hello
none

3.Nothing

Nothing是其他类型的子类型。Nothing没有实例。Nothing和null的区别时,Nothing是任何其他类型的子类型,而null是所有引用类型的子类。

4.Nil

Nil是一个空的List.可以定义为List[Nothing]。

    val b:List[Nothing]=List()
    println(Nil)
    println(b==Nil)

结果为:

List()
true

5.Unit

Unit表示无值。常用在方法里,表示没有返回值。

6.Any

Any是所有的类的超类。不知道数据类型时,常被推断为Any。AnyRef是Any的引用类型的基类。

上一篇下一篇

猜你喜欢

热点阅读