Scala 深刻淺出實戰經典 第53講:Scala中結構類型實戰詳解

王家林親授《DT大數據夢工廠》大數據實戰視頻 Scala 深刻淺出實戰經典(1-64講)完整視頻、PPT、代碼下載:
百度雲盤:http://pan.baidu.com/s/1c0noOt6
騰訊微雲:http://url.cn/TnGbdC
360雲盤:http://yunpan.cn/cQ4c2UALDjSKy 訪問密碼 45e2
土豆:http://www.tudou.com/programs/view/pR_4sY0cJLs/
優酷:http://v.youku.com/v_show/id_XMTI4NTE2NDI3Mg==.html?from=s1.8-1-1.2
愛奇藝:http://www.iqiyi.com/w_19rrtik9eh.html#vfrm=2-3-0-1
騰訊視頻: http://v.qq.com/boke/page/e/0/y/e01599vk0gy.html
技術愛好者尤爲是大數據愛好者 能夠加DT大數據夢工廠的qq羣html

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

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

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

package com.parllay.scala.type_parameterizitor

/**
* Created by richard on 15-8-7.
* 第53講:Scala中結構類型實戰詳解
*/
class Structural { def open() =print("A class instance Opened")}

object Structural_Type {

def main (args: Array[String]) {

init(new { def open() = println("Opened")})

type X = { def open():Unit }

def init(res:X) = res.open

init(new { def open()=println("Opened again")})

object A { def open() {println("A single object opened")}}
init(A)

val structural = new Structural
init(structural)
}

def init( res: {def open(): Unit}): Unit ={
res.open
}
}

/**
* 結構類型(structural type)爲靜態語言增長了部分動態特性,
* 使得參數類型再也不拘泥於某個已命名的類型,只要參數中包含結構中聲明的方法或值便可。
* 舉例來講,java裏對全部定義了close方法的抽象了一個Closable接口,
* 而後再用Closable類型約束參數,
* 而scala裏能夠不要求參數必須繼承自Closable接口只須要包含close方法;以下:

scala> def free( res: {def close():Unit} ) {
res.close
}

scala> free(new { def close()=println("closed") })
closed
也能夠經過type在定義類型時,將其聲明爲結構類型

scala> type X = { def close():Unit }
defined type alias X

scala> def free(res:X) = res.close

scala> free(new { def close()=println("closed") })
closed
上面傳入參數時,都是傳入一個實現close方法的匿名類,
若是某個類/單例中實現了close方法,也能夠直接傳入

scala> object A { def close() {println("A closed")} }

scala> free(A)
A closed

scala> class R { def close()=print("ok") }

scala> val r = new R

scala> free(r)
ok
結構類型還能夠用在稍微複雜一點的「複合類型」中,好比:

scala> trait X1; trait X2;

scala> def test(x: X1 with X2 { def close():Unit } ) = x.close
上面聲明test方法參數的類型爲:

X1 with X2 { def close():Unit }
表示參數須要符合特質X1和X2同時也要有定義close方法
*/

  

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