1package
com.dtspark.scala.basics23
/**4
* 1,scala的類和方法、函式都可以是泛型。5*
67* 2,關於對型別邊界的限定分為上邊界和下邊界(對類進行限制)
8* 上邊界:表達了泛型的型別必須是"某種型別"或某種型別的"子類",語法為「<:」,
9* 下邊界:表達了泛型的型別必須是"某種型別"或某種型別的"父類",語法為「>:」,
10*
1112
* 3, "<%" :view bounds可以進行某種神秘的轉換,把你的型別在沒有知覺的情況下轉換成目標型別,
13* 其實你可以認為view bounds是上下邊界的加強和補充,語法為:"<%",要用到implicit進行隱式轉換(見下面例子)
14*
1516
* 4,"t:classtag":相當於動態型別,你使用時傳入什麼型別就是什麼型別,(spark的程式的編譯和執行是區分了driver和executor的,只有在執行的時候才知道完整的型別資訊)
17* 語法為:"[t:classtag]"下面有列子18*
1920
* 5,逆變和協變:-t和+t(下面有具體例子)+t可以傳入其子類和本身(與繼承關係一至)-t可以傳入其父類和本身(與繼承的關係相反),
21*
2223
* 6,"t:ordering" :表示將t變成ordering[t],可以直接用其方法進行比大小,可完成排序等工作
24*/
2526
class
person(val name:string)30}
3132
class worker(name:string)extends
person(name)
3334
class
dog(val name:string)
3536
3738
39//
注意泛型用的是
40class club[t<:person](p1:t,p2:t)
4344
45class club2[t<%person](p1:t,p2:t)
4849
class
engineer
50class expert extends
engineer
51//
如果是+t,指定型別為某類時,傳入其子類或其本身
52//
如果是-t,指定型別為某類時,傳入其父類或其本身
53class meeting[+t]//
可以傳入t或t的子類
5455
class
maximum[t:ordering](val x:t,val y:t)59}
6061
object helloscalatypesystem
88//
這裡指定傳入的泛型具體是什麼
89 def participatemeeting(meeting:meeting[engineer])= println("welcome")
9091 }
t:classtag的例子(根據輸入動態定義)
命令列**:
scala> import scala.reflect.classtagimport scala.reflect.classtag
scala> def mkarray[t: classtag](elems: t*) = array[t](elems: _*)
mkarray: [t](elems: t*)(implicit evidence$1: scala.reflect.classtag[t])array[t]
scala> mkarray(1,2,3)
res1: array[int] = array(1, 2, 3)
scala> mkarray("ss","dd")
res2: array[string] = array(ss, dd)
scala> mkarray(1,"dd")res2: array[any] = array(1, dd)
scala的泛型類
泛型類 scala的類也可以定義泛型。接下來,我們來學習如何定義scala的泛型類 定義 語法格式 class 類 t val 變數名 t 定義乙個泛型類,直接在類名後面加上方括號,指定要使用的泛型引數 指定類對應的泛型引數後,就使用這些型別引數來定義變數了 示例 示例說明 實現乙個pair泛型類 ...
Scala入門七 scala的泛型
a 上邊界 表達了泛型的型別必須是 某種型別 或某種型別的 子類 案例 override def toset b a set b a 下邊界 表達了泛型的型別必須是 某種型別 或某種型別的 父類 案例 override def toset b a set b a view bounds可以進行某種神...
泛型T的型別獲取
t.getclass 或者t.class都是非法的,因為t是泛型變數。由於乙個類的型別是什麼是在編譯期處理的,故不能在執行時直接在base裡得到t的實際型別。author joshua version 2011 12 15 下午02 27 43 可以在service層直接呼叫,也可以在dao層擴充套...