今天知識星球球友,微信問浪尖了一個spark源碼閱讀中的類型限定問題。這個在spark源碼不少處出現,因此今天浪尖就整理一下scala類型限定的內容。但願對你們有幫助。html
scala類型參數要點數組
1. 非變微信
trait Queue[T] {}?
這是非變狀況。這種狀況下,當類型S是類型A的子類型,則Queue[S]不可認爲是Queue[A]的子類型或父類型,這種狀況是和Java同樣的。?
2. 協變
trait Queue[+T] {}?
這是協變狀況。這種狀況下,當類型S是類型A的子類型,則Queue[S]也能夠認爲是Queue[A}的子類型,即Queue[S]能夠泛化爲Queue[A]。也就是被參數化類型的泛化方向與參數類型的方向是一致的,因此稱爲協變。?
3. 逆變
trait Queue[-T] {}?
這是逆變狀況。這種狀況下,當類型S是類型A的子類型,則Queue[A]反過來能夠認爲是Queue[S}的子類型。也就是被參數化類型的泛化方向與參數類型的方向是相反的,因此稱爲逆變。?網絡
4. 類型下界函數
U >: T大數據
這是類型下界的定義,也就是U必須是類型T的父類(或自己,本身也能夠認爲是本身的父類)。spa
5. 類型上屆.net
S <: Tscala
這是類型上界的定義,也就是S必須是類型T的子類(或自己,本身也能夠認爲是本身的子類)。htm
泛型與約束實戰
1?泛型函數
ClassTag[T]保存了泛型擦除後的原始類型T,提供給被運行時的。
2?類型變量界定
泛型參數類型限定,限定具體類的能夠調用特定的方法。
3?泛型視圖限定
泛型視圖限定:表示把傳入不是Comparable[T]類型的隱式傳換爲Comparable[T]類型,Comparable[T]:爲T下界,T:爲Comparable[T]上界。
4?上下文界定
上下文界定:上下文界定是隱式參數的語法糖。如:Ordering:能夠進行隱式轉化的T類型。
Manifest關鍵字:數組在聲明時必需要求指定具體的類型,在函數泛型是沒法知道具體類型,英語詞性經過Manifest關鍵字使得運行時能夠根據這個Manifest參數作更多的事情。
6?ClassTag關鍵字
ClassTag[T]保存了泛型擦除後的原始類型T,提供給被運行時的。
在引入Manifest的時候,還引入了一個更弱一點的ClassManifest,所謂的弱是指類型信息不如Manifest那麼完整。用TypeTag替代了Manifest,用ClassTag替代了ClassManifest,緣由是在路徑依賴類型中,Manifest存在問題。
更多scala,spark,大數據知識,但願擴展視野解決疑難雜症及困惑,歡迎點擊閱讀原文,加入浪尖知識星球。
本文整理自網絡,如有侵權,請聯繫微信158570986刪除。
推薦閱讀:
Scala語法基礎之隱式轉換
Scala語言基礎之結合demo和spark講實現鏈式計算
文章來源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/81916961