Scala類型 : 結構類型

所謂」結構類型「,指的是一組關於抽象方法、字段、類型的規格說明。java

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

scala> def free( res: {def close():Unit} ) { 
            res.close 
        }
 
scala> free(new { def close()=println("closed") })
closed

也能夠經過type在定義類型時,將其聲明爲結構類型code

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方法參數的類型爲:it

X1 with X2 { def close():Unit }

表示參數須要符合特質X1和X2同時也要有定義close方法。class

相關文章
相關標籤/搜索