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


640?wx_fmt=png

今天知識星球球友,微信問浪尖了一個spark源碼閱讀中的類型限定問題。這個在spark源碼很多處出現,所以今天浪尖就整理一下scala類型限定的內容。希望對大家有幫助。

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的父類(或本身,自己也可以認為是自己的父類)。

5. 類型上屆

S <: T

這是類型上界的定義,也就是S必須是類型T的子類(或本身,自己也可以認為是自己的子類)。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM