一文詳解scala泛型及類型限定

640?wx_fmt=png

今天知識星球球友,微信問浪尖了一個spark源碼閱讀中的類型限定問題。這個在spark源碼不少處出現,因此今天浪尖就整理一下scala類型限定的內容。但願對你們有幫助。html

640?wx_fmt=png

 

640?wx_fmt=pngscala類型參數要點數組

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

640?wx_fmt=png泛型與約束實戰

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講實現鏈式計算

640?wx_fmt=png


文章來源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/81916961

相關文章
相關標籤/搜索