2016-03-08 73 views
3

下面是我的HashMap:斯卡拉地圖isDefinedAt()與contains()方法

val params1 = collection.mutable.HashMap[String, Any]() 

params1 += "forCourseId" -> "2" 

println(params1.isDefinedAt("forCourseId")) 

println(params1.contains("forCourseId")) 

是什麼isDefinedAt() & 方法之間的區別?

我需要檢查按鍵是否存在或不存在 主要關注的是,它不會拋出空指針異常。

回答

9

您可以檢查Scala的源代碼。在MapLike.scala你會看到isDefinedAt實際上只是打電話contains,這意味着他們是真正的一致:

def isDefinedAt(key: A) = contains(key) 

唯一真正的區別是,contains特定於Map界面(特別是它宣佈GenMapLike),而isDefinedAt可在所有PartialFunction類中找到。

val m: Map[Int,Int] = Map(1 -> 2) 
val pf: PartialFunction[Int,Int] = { case 1 => 1 } 

m.isDefinedAt(1) // ok 
m.contains(1)  // ok 
pf.isDefinedAt(1) // ok 
pf.contains(1) // doesn't compile