咱們在這文章將要學習Scala的最後一個特性是泛型。Java程序員們可能最近才知道這個東西,由於這個特性是在Java1.5中才被加入的。
泛型是一種可讓你使用類型參數的設施。例如當一個程序員正在實現一個鏈表時,將不得不面對諸如如何決定鏈表中節點保存數據的類型之類的問題。正由 於這是一個鏈表,因此每每會在不一樣的環境中使用,所以,咱們不能草率的決定節點數據類型,好比說Int。這種決定是至關的草率且侷限性的。
之前Java程序員們一般使用Object,全部類型的超類,來解決問題。可是這種方法遠遠算不上是理想方案,例如他沒法處理基本類型如int、 long、float等(1.6中的autobox特性能夠解決這個問題——譯者注),並且會讓使用者不得不使用大量的動態類型轉換。
Scala中的泛型機制能夠很輕鬆的解決這些個問題。來看下面這個最簡單的容器類:一個引用,能夠指向某個對象或者指向空。
class Reference[T] { private var contents: T = _ def set(value: T) { contents = value } def get: T = contents }
Reference類具備一個叫作T的類型參數來表示他說引用的對象的類型。這個類型在Reference中做爲了變量和函數的參數或者返回類型。
上面的代碼還演示了Scala中變量的表達方式,這個無需更多的解釋你們都能清楚。不過值得注意的是咱們給他賦予的初始值:_ ,這個表示一個默認值,對於數字類型來講是0,對於boolean來講是false,對於Unit(函數簽名)來講是() (無參數無返回),對於其餘來講是null。
要使用這個Reference 類,你須要制定他的類型參數,來告知這個引用到底引用了什麼類型。例如要建立一個指向Int的引用,你能夠這麼寫:
object IntegerReference { def main(args: Array[String]) { val cell = new Reference[Int] cell.set(13) println("Reference contains the half of " + (cell.get * 2)) } }
程序員
就像咱們看到的,咱們不須要吧get的返回值強制轉換成Int,並且因爲它被聲明成Int,你不可能在這個引用中放置其餘類型的對象。微信
更多精彩內容請關注:http://bbs.superwu.cn ide
關注超人學院微信二維碼:函數