本篇做爲scala快速入門系列的第三十五篇博客,爲你們帶來的是關於泛型的內容。java
scala和Java同樣,類和特質、方法均可以支持泛型。咱們在學習集合的時候,通常都會涉及到泛型。數組
那如何本身定義泛型呢?markdown
在scala中,使用方括號來定義類型參數。ide
語法函數
示例學習
參考代碼測試
不考慮泛型的實現spa
加入泛型支持scala
scala的類也能夠定義泛型。接下來,咱們來學習如何定義scala的泛型類。3d
語法
示例
需求:
咱們在定義方法/類的泛型時,限定必須從哪一個類繼承、或者必須是哪一個類的父類。此時,就須要使用到上下界。
使用<:
類型名錶示給類型添加一個上界,表示泛型參數必需要從該類(或自己)繼承。
語法
示例
參數代碼
上界是要求必須是某個類的子類,或者必須從某個類繼承,而下界是必須是某個類的父類(或自己)
語法
[NOTE]
示例
參考代碼1
參考代碼2
object _04GenericType { // 1. 定義類和子類 class Person class Policeman extends Person class Superman extends Policeman // 2. 定義泛型方法,指定泛型的類型上下界 def demo[T >: Policeman <: Person](array: Array[T])={ println(array) } // 3. 調用demo方法,傳入不一樣類型的數據進行測試 def main(args: Array[String]): Unit = { demo(Array(new Person)) demo(Array(new Policeman)) // 編譯報錯:String類型並非Person類型或者是它的子類 // demo(Array(new Superman)) } }
spark的源代碼中大量使用到了協變、逆變、非變,學習該知識點對咱們未來閱讀spark源代碼頗有幫助。
來看一個類型轉換的問題:
如何讓帶有泛型的類支持類型轉換呢?
語法
語法
語法
示例
參考代碼
本期的內容分享就到這裏了,喜歡的小夥伴們記得點個贊,持續關注喲~下期爲你們介紹的是scala的高階函數,敬請期待٩(๑>◡<๑)۶