Scala 值類(lèi)

2022-05-13 15:04 更新

使用值類(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()



以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)