第58讲:Scala中Abstract Types实战详解学习笔记

58讲:ScalaAbstract Types实战详解学习笔记

抽象类型:在trait class/Abstract Class中定义的类型是抽象的。

 

trait Reader{

  type In <: java.io.Serializable    //type表明是定义类型,但没有指明是什么类型。必须在trait的实现中定义具体的类型。

        //<: java.io.Serializable 是对抽象类型进行了限定。

  type Contents

  def read(in: In): Contents    //输入参数类型是抽象类型In,返回类型就是定义的抽象类型Contents

}

class FileReader extends Reader {

  type In = String    //给抽象类型赋值

  type Contents = BufferedSource

  def read(name: In) = Source.formFile(name)

}

object Abstract_Types {

 

  def main(args: Array[String]) {

    val fileReader = new FileReader

    val content = fileReader.read("E:\\WangJialin.txt")

    for (line <- content.getLines){

      println(line)

    }

  }

}

 

trait Reader[In,Contents]{}这样是类型参数。

抽象类型和类型参数如何选择使用?

如果类型是在类型实例化时具体指出的,就需要使用类型参数,如ListList就行类型参数T

如果类型是在子类中给出的,例如fileReader,类型是在子类中给出的。

reader可以有很多子类。这时用抽象类型比较合适。

另外类型参数本身语法太复杂,如对两个参数都进行类型限制。

特别是有两个以上参数时就更复杂了。这时使用抽象类型就比较合适。

总之:能用抽象类型时尽量使用抽象类型。

 

 

以上内容是从王家林老师DT大数据课程第58讲的学习笔记。
DT大数据微信公众账号:DT_Spark  

王家林老师QQ:1740415547 

王家林老师微信号:18610086859
百度网盘共享的DT大数据梦工厂王家林老师第1-91讲的视频内容:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group

56讲视频网站:

爱奇艺视频:http://www.iqiyi.com/w_19rrt570q9.html

土豆视频:http://www.tudou.com/programs/view/E5QGmPvfupc/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值