scala 18 泛型和泛型約束

2021-10-08 05:59:05 字數 3511 閱讀 7355

上下界 bounds

檢視界定 view bounds

上下文界定context bounds

manifest和classtag關鍵字

多重界定

scala型別約束

def getmiddle(arr:

array[int])

= arr(arr.length/2

)def main(args:

array[string])

: unit =

def getmiddle[a](arr:

array[a])

= arr(arr.length/2

)def main(args:

array[string])

: unit =

示例

/ 類名後面的方括號,就表示這個類可以使用兩個型別、分別是t和s

// 這個名字可以任意取

class pair[t, s](

val first: t,

val second: s)

case

class people(var name

:string

,val age:

int)

object pair

}

>::指明下界,表達了泛型的型別必須是"某種型別"或某種型別的"父類"

/

/要控制person只能和person、policeman聊天,但是不能和superman聊天。此時,還需要給泛型新增乙個下界。

//上下界

class pair[t <

: person, s >

: policeman <

:person](

val first: t,

val second: s) 對$說: $msg")

當給下面這個類傳入3、5時會報錯。因為3、5不是comparable[t]的子類

class pair_notperfect[t <: comparable first: t val second:>

示例

*/t : a : b : 型別變數界定,即同時滿足at這種隱式值和bt這種隱式值

t 同時滿足隱式轉換的a和隱式轉換的b

def main(args:

array[string])

: unit =

rocky(

"spark"

) }

scala 泛型 屆定 約束

package com.self study import scala.reflect.classtag class genericity 泛型,中括號f s t 都表示執行時引數型別 classtag f 儲存了泛型擦除後的原始型別f,提供給被執行時的 class triple f classta...

泛型 泛型簡介和泛型類

在泛型引入之前,如果我們需要產生多個物件,每個物件的邏輯完全一樣,只是物件內的成員變數的型別不同,那麼我們只能建立多個類檔案,給每個類的成員變數設定不同的資料型別。這麼做會導致類的膨脹,重用性太差。一種方式是對將object作為變數型別,但是需要對獲取的資料進行強制型別轉換,這個過程可能導致型別轉換...

泛型和非泛型

原帖 泛型和非泛型 一 區別 1 非泛型類容器來說,該容器的元素型別是 object 使用方便,無須指定具體的元素型別。但是這種使用上的方便帶來了慘重的效能上的損失,因為,我們每次插入乙個元素就要經過一次 裝箱 操作,每次訪問乙個元素就要經過一次 拆箱 操作。arraylist hashtable ...