泛型和隱式轉換

2022-08-24 20:39:07 字數 2055 閱讀 9445

泛型類 [t]

def main(args: array[string]): unit = 

// 泛型類

class student[t,s](info1: t, info2: s)

泛型函式 [t]
def fun[t](field: t): unit =
def main(args: array[string]): unit = 

// 指定泛型上限

def up[t <: c2 t unit="

// 指定泛型下限

def down[t >: c2](field: t): unit =

class c1 {}

class c2 extends c1

class c3 extends c2

class c4

// 檢視界定,希望跨越類繼承層次結構時,可以使用檢視界定來實現的

def view[t

// 泛型檢視界定

// int隱式轉換成richint,richint是comparable[int]的子類

協變

class c1 {}

class c2 extends c1

// 協變, 子類可以賦值給父型別

val child = new c5[c2](new c2)

val parent: c5[c1] = child

// 協變泛型

class c5[+t](field: t) {}

逆變

class c1 {}

class c2 extends c1

// 逆變泛型

class c6[-t](field: t) {}

// 逆變, 父類可以賦值給子類

val parent1 = new c6[c1](new c1)

val child1: c6[c2] = parent1

// 定義double型別 隱式轉換為 int型別

implicit def doubletoint(d: double) = d.toint

val i: int = 3.14

println(s"i = $i")

i = 3
說明: implicit def 方法名(變數名: 轉換的型別) = 返回的轉換結果

// 調入隱式轉換

import spark.implicits._

隱式轉換發生的時機

需要的引數的型別與實際型別不一致時

def fun(x: int) = {}

fun(3.14)

呼叫物件不存在的方法時

class c1 

}val c = new c1()

c.read()

隱式引數

def main(args: array[string]): unit = 

def func(info: string)(implicit c1: c1): unit =

class c1

}

fun info = log!
參考:

隱式轉換和隱式引數

1 隱式轉換 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式。這種函式將會自動應用,將值從一種型別轉換為另一種型別 object scala01 implicit def f1 d double int double 是輸入型別,int 是轉換後的型別 隱式函式的底層工作原理 def...

隱式轉換和

boolean true true false true true true 本來以為理所當然應該這樣的問題,原來好複雜。ecmascript中相等操作符 這種操作符會先轉換運算元 隱式轉換 然後再比較它們的相等性。基本轉換規則 如果有乙個運算元是布林值,則在比較相等性之前先將其轉換為數值 fals...

八 隱式轉換和隱式引數

目錄 一 隱式轉換 1 隱式函式入門 2 隱式轉換的注意事項和細節 3 隱式轉換豐富類庫功能 二 隱式值 三 隱式類 四 隱式的轉換時機 五 隱式解析機制 六 隱式轉換的前提 1 隱式函式基本介紹 隱式轉換函式是以implicit關鍵字宣告的帶有單個引數的函式。這種函式將會自動應用,將值從一種型別轉...