第58講:Scala中Abstract Types實戰詳解

package com.parllay.scala.type_parameterizitor

import scala.io.{Source, BufferedSource}

/**
 * Created by richard on 15-8-17.
 * 第58講:Scala中Abstract Types實戰詳解
 */

/**
 * scala裏的類型,除了在定義class,trait,object時會產生類型,
 * 還能夠經過type關鍵字來聲明類型。

type至關於聲明一個類型別名:

scala> type S = String
defined type alias S
上面把String類型用S代替,一般type用於聲明某種複雜類型,或用於定義一個抽象類型。

場景1 用於聲明一些複雜類型,好比下面聲明一個結構類型

scala> type T = Serializable {
 |          type X
 |          def foo():Unit
 |     }
defined type alias T
這個結構類型內部也容許經過type來定義類型,這裏對X沒有賦值表示X是一個抽象類型,
須要子類型在實現時提供X具體的類型。下面是一個T類型的具體實例:

scala> object A extends Serializable{ type X=String; def foo(){} }

scala> typeOf[A.type] <:< typeOf[T]
res19: Boolean = true
場景2 用於抽象類型

scala> trait A { type T ; def foo(i:T) = print(i) }

scala> class B extends A { type T = Int }

scala> val b = new B

scala> b.foo(200)
200

scala> class C extends A { type T = String }

scala> val c = new C

scala> c.foo("hello")
hello
 */
trait Reader{
  type In <: java.io.Serializable
  type Contents
  def read(in: In): Contents
}

class FileReader extends Reader {
  type In = String
  type Contents = BufferedSource
  override  def read(name : In) = Source.fromFile(name)
}
object Abstract_Type {

  def main(args: Array[String]) {
    val fileReader = new FileReader
    val content = fileReader.read("path")
  }

}

  

王家林親授《DT大數據夢工廠》大數據實戰視頻 Scala 深刻淺出實戰經典(1-87講)完整視頻、PPT、代碼下載:html

百度雲盤:http://pan.baidu.com/s/1c0noOt6
騰訊微雲:http://url.cn/TnGbdC
360雲盤:http://yunpan.cn/cQ4c2UALDjSKy 訪問密碼 45e2
土豆:http://www.tudou.com/programs/view/E5QGmPvfupc/
優酷:http://v.youku.com/v_show/id_XMTI4ODEwMzM3Mg==.html?from=s1.8-1-1.2
愛奇藝:http://www.iqiyi.com/w_19rrt570q9.html#vfrm=2-3-0-1
騰訊視頻:http://v.qq.com/boke/page/i/0/v/i0159zikiqv.html
技術愛好者尤爲是大數據愛好者 能夠加DT大數據夢工廠的qq羣java

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

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

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

相關文章
相關標籤/搜索