Scala 深刻淺出實戰經典 第48講:Scala類型約束代碼實戰及其在Spark中的應用源碼解析

王家林親授《DT大數據夢工廠》大數據實戰視頻 Scala 深刻淺出實戰經典(1-64講)完整視頻、PPT、代碼下載:
百度雲盤:http://pan.baidu.com/s/1c0noOt6
騰訊微雲:http://url.cn/TnGbdC
360雲盤:http://yunpan.cn/cQ4c2UALDjSKy 訪問密碼 45e2
技術愛好者尤爲是大數據愛好者 能夠加DT大數據夢工廠的qq羣java

DT大數據夢工廠① :462923555
DT大數據夢工廠②:437123764
DT大數據夢工廠③ :418110145微信

微信公衆帳號: DT_Spark
王家林老師微信號: 18610086859
王家林老師QQ: 1740415547
王家林老師郵箱: 18610086859@126.comide

本視頻由王家林老師, 親自講解, 徹底經過代碼實戰把您帶人大數據的時代.大數據

package com.parllay.scala.type_parameterizitor

/**
 * Created by richard on 15-8-1.
 * 第48講:Scala類型約束代碼實戰及其在Spark中的應用源碼解析
 */

class Pair_Type[T](val first: T, val second: T) {

  def smaller(implicit ev : T <:< Ordered[T]) =

    if(first < second) first else second

}

object Type_Contraints {

  def main(args: Array[String]) {

    /**
     *  A =:= B 表示A類型等同於B類型
     *  A <:< B 表示A類型是B類型的子類型
     *
     *
     */

    def rocky[T](i:T)(implicit ev : T <:< java.io.Serializable): Unit = {
      println("Life is short, you need spark")
    }

    /**
     * 調用方法的時候, scala會推斷出T 類型爲String, 而後隱式比較 String 和 Serializable
     *
     * String是Serializable的子類型. 會輸出 Life is short, you need spark
     */
    rocky("spark")

    /**
     * 約束的做用1:在特定條件下使用:
     * 好比如下實例Pair_Type class, 這個時候咱們能夠構建出Pair[File] 實例,
     * 可是隻有在真正調用smaller方法的時候纔會報錯, 由於File 並無實現Ordered的方法;
     */

    /**
     * 約束的做用2:改進推斷類型
     *
     */

    //def firstLast[A,C <: Iterable[A]](it : C) = (it.head, it.last)

    /**
     * 當咱們執行以下代碼, 推斷出的類型爲:[Noting, List[int]] 不知足A,C <: Iterable[A]
     * 類型推斷器沒法判斷出A的類型, 由於A,C是在同一個步驟中被匹配到的;
     * 那麼解決的辦法是 先判斷C的類型, 而後判斷A的類型.修改成
     */
    def firstLast[A,C](it : C)(implicit env :C <:< Iterable[A]) = (it.head, it.last)

    firstLast(List(1, 2, 3))
  }

}

  

網站計數器
相關文章
相關標籤/搜索