上下界 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 ...