package learn.scalaimport org.apache.spark.SparkConfimport scala.collection.mutable.Mapimport javax.ws.rs.core.applicationobject ChecksumAccumulator { //Scala比Java更面向?qū)ο蟮囊粋€方面是Scala沒有靜態(tài)成員,替代品是,Scala有單例對象 //singleton object.用 object關(guān)鍵字替換了class關(guān)鍵字 //當(dāng)單例對象與某個類共享同一個名稱時,它被稱作是這個類的伴生對象.你必須在同一個源文件里定義類和它的伴生對象.類被稱作這個單例對象的伴生類 //類和它的伴生對象可以互相訪問其私有成員 //類和單例對象間的一個差別是,單例對象不帶參數(shù),而類可以。因為你不能用new關(guān)鍵字實(shí)例化一個單例對象,你沒機(jī)會傳遞給它參數(shù) //每個單例對象都被作為由一個靜態(tài)變量指向的虛構(gòu)類:synthetic class的一個實(shí)例來實(shí)現(xiàn) //特別要指出的是,單例對象會在第一次被訪問的時候初始化 //不與伴生類共享名稱的單例對象被稱為孤立對象:standalone object。由于很多種原因你會用到它,包括把相關(guān)的功能方法收集在一起 //或定義一個scala應(yīng)用的入口點(diǎn) PRivate val cache = Map[String, Int]() def calculate(s: String): Int = if (cache.contains(s)) cache(s) else { val acc = new ChecksumAccumulator acc.sum=1 for (c <- s){//對傳入的字符串的每個字符循環(huán)一次 println(c) acc.add(c.toByte) } val cs = acc.get() cache += (s -> cs) cs }}class ChecksumAccumulator { //public 是scala的缺省訪問級別 private var sum = 0 //b是 val類型的,不能在 add方法中再次賦值 def add(b: Int): Unit = { sum += b } def get(): Int = { sum //如果沒有發(fā)現(xiàn)任何顯示的返回語句,Scala方法將返回方法中最后一個計算得到的值. //return sum }}
新聞熱點(diǎn)
疑難解答