Scala 深入浅出实战经典 第80讲:scala中List的泛型分析以及::类和Nil对象

来源:互联网 发布:paxos算法执行过程 编辑:程序博客网 时间:2024/06/08 07:59

一、课程前导
DT大数据梦工厂的微信公众号是DT_Spark,每天都会有大数据实战视频发布,请您持续学习。
Scala 深入浅出实战经典(1-64讲)完整视频、PPT、代码下载:
百度云盘:http://pan.baidu.com/s/1c0noOt6
腾讯微云:http://url.cn/TnGbdC
360云盘:http://yunpan.cn/cQ4c2UALDjSKy  访问密码 45e2
Scala是最为重要的大数据语言,该视频每天还在持续跟新中,预计大约有140讲,请您根据上述视频彻底掌握Scala实战技术。
最后,王家林老师个人的微信是18610086859

51CTO视频:http://edu.51cto.com/lesson/id-71116.html

优酷视频:http://v.youku.com/v_show/id_XMTMwMzk5NTM0MA==.html?from=y1.7-1.2

腾讯视频:http://v.qq.com/boke/page/s/0/s/s0161b7yg4s.html

56网视频:http://www.56.com/u41/v_MTM4MzA2MTk4.html

 

二、课程内容

【DT大数据梦工厂视频】第80讲:scala中List的泛型分析以及::类和Nil对象

本讲视频由王家林老师通过代码案例的方式讲解了List的泛型分析以及::类和Nil对象。List是对scala的类型系统的一个非常好的使用,进一步巩固List的知识对于理解scala的类型系统是非常有价值的。本讲主要分析了List的泛型、::类和Nil对象。
一,List的泛型
 List类的源代码为
 sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]]{
 def isEmpty : Boolean
 def head : A
 def tail : List[A]
 .......
 }
从List的源码中可以知道List是抽象类,所以我们不可以直接创建List的实例,List[+A]表示List是协变的。方法head 会返回List的第一个元素,元素的类型为泛型A。方法tail返回除了List中第一个元素之外的其他的元素所以构成的新的List集合,其类型是List[A]。
二,::类和Nil对象
 List有两个非常重要的子类,一个是::,一个是Nil,这两个子类都是case class。Nil表示一个空的列表,而::表达的是一个非空的列表。
 ::类的源代码如下:
 final case class ::(private var hd : B ,private[scala] var tl : List) extends List{ .....}
 这里::使用了中缀表达式的方式,中缀表达式是支持模式匹配的,参数hd表示元素的开头,参数tl表示元素的结束。
 Nil的源代码如下:
 case object Nil extends List[Nothing]{
 override def isEmpty = true
 override def head : Nothing = throw new NoSuchElementException("tail of empty list")
 override def tail : List[Nothing] = throw new UnsupportedOperationException("tail of empty list")
 override def equals(that Any) = that match{
 case that1 : scala.collection.GenSeq[_] => that1.isEmpty
 case _ => false
 }
 } List[Nothing]中的Nothing表示不存在任何内容,所有Nil可以兼容List的任何类型,而Nil本身就是表示类型的值不存在,因为值不存在,所有Nil的head和tail方法都抛出了异常。

 

0 0
原创粉丝点击