第58讲:Scala中Abstract 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]{}这样是类型参数。
抽象类型和类型参数如何选择使用?
如果类型是在类型实例化时具体指出的,就需要使用类型参数,如List,List就行类型参数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/