scala中的option[T]、Any、Nothing、Null和Nil
1、option[T]
option[T]主要是用來避免NullPointerException異常的(Option本身是一個容器)
// Java 裡 HashMap 的 get() 方法,如果找不到對應的 key 值,就會反回 null:
HashMap<String, String> myMap = new HashMap<String, String>();
myMap.put("key1", "value1");
String value1 = myMap.get("key1"); // 返回 "value1"
String value2 = myMap.get("key2"); // 返回 null
System.out.println(value1.length()); // 沒問題,答案是 6
System.out.println(value2.length()); // 拋 NullPointerException
// Scala 可以不定義變數的型別,不過為了清楚些,我還是
// 把他顯示的定義上了
val myMap: Map[String, String] = Map("key1" -> "value")
val value1: Option[String] = myMap.get("key1")
val value2: Option[String] = myMap.get("key2")
println(value1) // Some("value1")
println(value2) // None
Option的getOrElse方法
val option1: Option[Int] = Some(123)
val option2: Option[Int] = None
val value1 = option1.getOrElse(0) // 這個 value1 = 123
val value2 = option2.getOrElse(0) // 這個 value2 = 0</span>
2、Any
Any是abstract類,它是Scala類繼承結構中最底層的。所有執行環境中的Scala類都是直接或間接繼承自Any這個類,它就是其它語言(.Net,Java等)中的Object。
3、Nothing
Nothing是所有型別的子類,Nothing沒有物件,但是可以用來定義型別。例如,如果一個方法丟擲異常,則異常的返回值型別就是Nothing(雖然不會返回)
def get(index:Int):Int={
if(x<0)
throw new Exception(...)
else
....
}
if語句是表示式,有返回值,必然有返回值型別,如果x < 0,丟擲異常,返回值的型別為Nothing,Nothing也是Int的子類,所以,if表示式的返回型別為Int,get方法的返回值型別也為Int。
4、Null和Nil
Null是所有AnyRef的子類,在scala的型別系統中,AnyRef是Any的子類,同時Any子類的還有AnyVal。對應java值型別的所有型別都是AnyVal的子類。所以Null可以賦值給所有的引用型別(AnyRef),不能賦值給值型別,這個java的語義是相同的。 null是Null的唯一物件
Nil是一個空的List,定義為List[Nothing],根據List的定義List[+A],所有Nil是所有List[T]的子類。
相關文章
- Scala中None, Nil, Nothing的區別None
- Objective-c nil, Nil, NULL和NSNull的區別ObjectNull
- Objective-C 中 NULL、nil、Nil、NSNull 的定義及不同ObjectNull
- MySQL中is not null和!=null和<>null的區別MySqlNull
- Kotlin Type? vs Scala OptionKotlin
- swift 中的 AnyObject 和 AnySwiftObject
- 0、""(空字串)、Null、Empty、與 Nothing 的區別 (轉)字串Null
- 你真的理解T-sql中的NULL嗎?SQLNull
- Swift 5.7 中的 any 和 some (譯)Swift
- any和anyObjectObject
- 【Scala篇】--Scala中的函式函式
- javascrit中undefined和null的區別JavaUndefinedNull
- js中null和undefined的區別JSNullUndefined
- js中undefined和null的區別JSUndefinedNull
- MySQL中的NULL和空串比較MySqlNull
- IS NULL和IS NOT NULLNull
- c#中的ReadOnlySequence<T>和ReadOnlySequenceSegment<T>C#
- Akka系列(五):Java和Scala中的FutureJava
- Akka 系列(五):Java 和 Scala 中的 FutureJava
- Swift中Any & AnyObjectSwiftObject
- Scala學習(五)---Scala中的類
- GO 空指標和nilGo指標
- Go 語言 nil 和介面Go
- 關於零值和nil
- 探索javascript中null和undefined的深淵JavaScriptNullUndefined
- Java 泛型中? super T和? extends T的區別Java泛型
- jquery獲得option的值和對option進行操作jQuery
- mysql遇到Variable can’t be set to the value of ‘NULL’MySqlNull
- pgsql 中沒有any()?SQL
- oracle中的nullOracleNull
- iOS給字典中插入nil的幾種情景iOS
- Swift中 Nil Coalescing 運算子的使用技巧Swift
- scala中:: , +:, :+, :::, +++的區別
- scala中的TraitAI
- 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的區別devNull
- 大資料Scala系列之樣例類_Option_偏函式大資料函式
- 關於GRANT賦權時,WITH GRANT OPTION和WITH ADMIN OPTION的使用
- MySQL: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1MySql