W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
使用值類(lèi),Scala允許擴(kuò)展 AnyVal
的用戶定義的值類(lèi)。
Scala 值類(lèi)使我們能夠在Scala類(lèi)型層次結(jié)構(gòu)的AnyVal一側(cè)編寫(xiě)類(lèi)。
Scala中的值類(lèi)不分配運(yùn)行時(shí)對(duì)象。
值類(lèi)允許我們將擴(kuò)展方法添加到類(lèi)型,而不需要?jiǎng)?chuàng)建實(shí)例的運(yùn)行時(shí)開(kāi)銷(xiāo)。
這是通過(guò)定義新的AnyVal子類(lèi)來(lái)實(shí)現(xiàn)的。
下面說(shuō)明了一個(gè)值類(lèi)定義:
class SomeClass(val underlying: Int) extends AnyVal
前面的SomeClass類(lèi)有一個(gè)單一的公共val參數(shù),它是基礎(chǔ)運(yùn)行時(shí)表示。
編譯時(shí)的類(lèi)型是SomeClass
,但在運(yùn)行時(shí),表示是一個(gè)Int
。
值類(lèi)可以定義defs,但不能定義vals,vars或嵌套的traits類(lèi)或?qū)ο蟆?
以下代碼說(shuō)明了值類(lèi) SomeClass
中的 def
。
值類(lèi)只能擴(kuò)展一個(gè)通用特征。
class SomeClass(val i: Int) extends AnyVal { def twice() = i*2 }
這里SomeClass是一個(gè)用戶定義的值類(lèi),它包裝Int參數(shù)并封裝兩次方法。
要調(diào)用兩次方法,請(qǐng)按如下所示創(chuàng)建SomeClass類(lèi)的實(shí)例:
val v = new SomeClass(9) v.twice()
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: