Scala中的 Option、Some、None、Null、Nil、Nothing

Scala的一些类型。

Scala的Option类型:

Option可以存储任意类型的值,而Option的实例就是 Some 和 None 对象实例。
    Some 和 None 都是 Option 的子类,而且都是 final 类型,所以没有派生子类。

Option的数据存取

Option的数据存取就是对 Some 对象的操作。
1
2
3
4
5
6
7
8
9
10
class optionTest extends TestCase{

val capitals = Map("france" -> "paris", "japan" -> "tokyo")

def test1() {
val a = capitals get "france"
val b = capitals get "a"
println(a) //Some(paris)
println(b) //None
}
结果对象类型为Some或者None
当程序给你回传Some的时候,代表这个函数成功的给了你一个String,
而你可以通过get()函数拿到那个String;
如果程序返回的是None,也就是没有String返回的时候,如果还要调用,则会抛出异常:NoSuchElementExpection。

Scala的Null类型:

Null是所有AnyRef的子类,在Scala的类型系统中,AnyRef是Any的子类,同是Any子类的还有AnyVal。
对应Java值类型的所有类型都是AnyVal的子类。
所以Null可以赋值给虽有的引用类型,而不能赋值给值类型,这个java的语义是相同的。
null是Null的唯一对象。

Scala的Nothing类型:

Nothing是所有类型的子类,也是Null的子类,Nothing没有对象,但是可以用来定义类型。
例如,如果一个方法抛出异常,则异常的返回值类型就是Nothing(不会返回)
1
2
3
4
def get(index:Int):Int = {
if(x<0) throw new Expection(...)
else ...
}
if是表达式,必然有返回值,返回值必然会有类型。
如果x<0抛出异常,返回值的类型为Nothing,Nothing也是Int的子类,
所以,if表达式的返回类型为Int,get方法的返回值类型也为Int

Scala的Nil类型:

Nil是一个空List,定义为 List[Nothing],根据List的定义 LIst[+A],所有的Nil是虽有List[T]的子类。