值類型與通用特質(zhì)是scala特性中一個(gè)特別知識(shí)點(diǎn),需要工作使用中慢慢體會(huì)
通用特質(zhì)
A universal trait is a trait that extends Any, only has def s as members, and does no initialization.
繼承自Any
的trait,內(nèi)部成員只有def定義的方法统扳,且沒(méi)有初始化語(yǔ)句。
值類型
首先看一個(gè)最簡(jiǎn)值類型(官網(wǎng))
class Wrapper(val underlying: Int) extends AnyVal {
def foo: Wrapper = new Wrapper(underlying * 19)
}
值類型都是要繼承AnyVal的,更多的情況下畅姊,值類型還會(huì)繼承通用特質(zhì)
咒钟,如下:
trait Printable extends Any {
def print(): Unit = println(this)
}
//Wrapper是一個(gè)值類型,繼承了Printable通用特質(zhì)
class Wrapper(val underlying: Int) extends AnyVal with Printable
val w = new Wrapper(3)
//因?yàn)槔^承了普通特質(zhì)的print方法若未,招致此處需要實(shí)例化Wrapper
w.print() // actually requires instantiating a Wrapper instance
總結(jié)
- Value類雖然沒(méi)有顯示的用
final
修飾朱嘴,但是依然可以認(rèn)為是final
類。
參考
1 官方文檔
2 Scala 的Value Class 和 Universal Traits
3 通用特質(zhì)(universal traits)