日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[scala-spark]5. 伴生类和伴生对象

發(fā)布時(shí)間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [scala-spark]5. 伴生类和伴生对象 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

單例對(duì)象與類同名時(shí),這個(gè)單例對(duì)象被稱為這個(gè)類的伴生對(duì)象,而這個(gè)類被稱為這個(gè)單例對(duì)象的伴生類。伴生類和伴生對(duì)象要在同一個(gè)源文件中定義,伴生對(duì)象和伴生類可以互相訪問其私有成員。不與伴生類同名的單例對(duì)象稱為孤立對(duì)象。(彌補(bǔ)了Scala中缺少static關(guān)鍵字的缺陷,可以與java無(wú)縫對(duì)接)

import scala.collection.mutable.Mapclass ChecksumAccumulator {private var sum = 0def add(b: Byte) {sum += b}def checksum(): Int = ~(sum & 0xFF) + 1 }object ChecksumAccumulator {private val cache = Map[String, Int]()def calculate(s: String): Int =if (cache.contains(s))cache(s)else {val acc = new ChecksumAccumulatorfor (c <- s)acc.add(c.toByte)val cs = acc.checksum()cache += (s -> cs)println("s:"+s+" cs:"+cs)cs}def main(args: Array[String]) {println("Java 1:"+calculate("Java"))println("Java 2:"+calculate("Java"))println("Scala :"+calculate("Scala"))} }

ChecksumAccumulator單例對(duì)象有一個(gè)方法,calculate,用來(lái)計(jì)算所帶的String參數(shù)中字符的校驗(yàn)和。它還有一個(gè)私有字段,cache,一個(gè)緩存之前計(jì)算過的校驗(yàn)和的可變映射。2方法的第一行,“if (cache.contains(s))”,檢查緩存,看看是否傳遞進(jìn)來(lái)的字串已經(jīng)作為鍵存在于映射當(dāng)中。如果是,就僅僅返回映射的值,“cache(s)”。否則,執(zhí)行else子句,計(jì)算校驗(yàn)和。else子句的第一行定義了一個(gè)叫acc的val并用新建的ChecksumAccumulator實(shí)例初始化它。下一行是個(gè)for表達(dá)式,對(duì)傳入字串的每個(gè)字符循環(huán)一次,并在其上調(diào)用toByte把字符轉(zhuǎn)換成Byte,然后傳遞給acc所指的ChecksumAccumulator實(shí)例的add方法。完成了for表達(dá)式后,下一行的方法在acc上調(diào)用checksum,獲得傳入字串的校驗(yàn)和,并存入叫做cs的val。下一行,“cache += (s -> cs)”,傳入的字串鍵映射到整數(shù)的校驗(yàn)和值,并把這個(gè)鍵-值對(duì)加入cache映射。方法的最后一個(gè)表達(dá)式,“cs”,保證了校驗(yàn)和為此方法的結(jié)果。

輸出結(jié)果:

s:Java cs:-130 Java 1:-130 Java 2:-130 s:Scala cs:-228 Scala :-228

問題來(lái)了,ChecksumAccumulator單例對(duì)象是不能new的,但是在代碼中出現(xiàn)了val acc = new ChecksumAccumulator,這不是矛盾嗎?其實(shí)不然,這里new的其實(shí)是ChecksumAccumulator單例對(duì)象的伴生類,即ChecksumAccumulator類,而伴生類和伴生對(duì)象可以互相訪問對(duì)方的私有成員,所以acc可以訪問ChecksumAccumulator單例對(duì)象的cache變量。同理,那么第一次測(cè)試“Java”字符串的時(shí)候,acc實(shí)例執(zhí)行了checksum()方法,接下來(lái)并把這個(gè)數(shù)據(jù)存到cache這個(gè)val中。在第二次測(cè)試“Java”字符串的時(shí)候,程序是直接從cache變量中獲取到了數(shù)據(jù),并返回。

這里也可以看出類和單例對(duì)象的一個(gè)差別是,單例對(duì)象是在第一次訪問的時(shí)候初始化,不可以new,不能帶參數(shù),而類可以new,可以帶參數(shù)。每個(gè)單例對(duì)象都被作為由一個(gè)靜態(tài)變量指向的虛構(gòu)類:synthetic class的一個(gè)實(shí)例來(lái)實(shí)現(xiàn),因此它們與Java靜態(tài)類有著相同的初始化語(yǔ)法。

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的[scala-spark]5. 伴生类和伴生对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 性插视频在线观看 | 丰满少妇影院 | 第一毛片| 视频在线a | 影音先锋成人在线 | 国产99久一区二区三区a片 | 日韩乱码人妻无码系列中文字幕 | 91九色视频在线 | 荒野求生21天去码版网站 | 小泽玛利亚一区二区三区视频 | 国产成人精品久久久 | 欧美aa一级 | 日本特级黄色录像 | 亚洲精品第三页 | 动漫美女靠逼 | 91人人爱 | 97精品国产97久久久久久免费 | 男人草女人| 国内视频一区二区 | 亚洲小说网 | 91视频免费在线观看 | 婷婷亚洲五月色综合 | 欧美在线中文 | 国产一级全黄 | 日韩av第一页 | 性插视频在线观看 | 操欧洲美女 | 国产精品va无码一区二区 | 一区二区三区免费毛片 | 色香天天 | 国产精品久久久久av | 国产ts人妖系列高潮 | 无码人妻精品一区二区50 | 69久久精品无码一区二区 | 四虎网站在线 | 国产成人精品一区二区三区四区 | 日本视频免费看 | 国产视频手机在线播放 | 国产专区视频 | 秋霞自拍 | 国产91影院| 五月激情六月丁香 | 华丽的外出在线观看 | 欧美韩日 | 国产欧美日韩91 | www99热| 亚洲国产免费视频 | 国产精品无人区 | 波多野结衣电影免费观看 | 国产精品2区 | 中文字幕免费一区二区 | 久久一区二区三 | 韩产日产国产欧产 | 日本成人福利视频 | 特黄特色大片免费 | 国产aⅴ| 国产一级一级国产 | 亚洲视频四区 | 久久香焦| 黑人一级 | 黄色在线免费观看 | 日韩一区二区三区久久 | 中文字幕福利 | 国产精品网站免费 | 亚洲免费视频一区 | 夜夜嗨av一区二区 | 艳妇av | 国产ts在线 | 亚洲国产日韩欧美 | 性欧美jzjz2| 青青草视频在线看 | 亚洲你懂得 | 大胸美女啪啪 | 九九精品网 | 久久久久亚洲av成人网人人网站 | 国产成人精品av久久 | 男人天堂avav | 特级西西444www | 亚洲午夜久久久久久久国产 | 国产欧美视频在线 | 亚洲图片欧美在线 | 二区三区在线观看 | 四虎影院一区 | 成人香蕉视频 | 自拍超碰在线 | 久久涩涩 | 绿帽av | 亚洲国产精品一区二区三区 | aaaaaaa毛片 | 欧美乱轮 | 久久久久免费看 | 成人永久视频 | 影音先锋男人站 | 红桃视频一区 | 91精品国产综合久久久蜜臀 | 肉色超薄丝袜脚交一区二区图片 | 桃色视频在线 | 亚洲视频一区二区三区四区 | 欧美不卡三区 |