41.List继承体系实现内幕和方法操作源码揭秘
来源:互联网 发布:白衣服发黄 知乎 编辑:程序博客网 时间:2024/06/03 22:48
一、List的继承体系分析和源码解读
1.List类
abstract class List[+A] ...
List是抽象的类,我们平时用List(1,2,3)来构建一个List对象,用的都是其伴生对象的apply方法
2.List有两个子类Nil和::
这两个子类都实现了其成员方法isEmpty、head、tail
//* This class comes with two implementing case classes `scala.Nil` //* and `scala.::` that implement the abstract members `isEmpty`, //* `head` and `tail`.
3.::类
final case class ::[B](override val head: B, private[scala] var tl: List[B]) extends List[B] { override def tail : List[B] = tl override def isEmpty: Boolean = false}
tail和isEmpty都是函数,我们平时调用一个List的tail时,使用的是其方法而并非成员
由于scala是面向对象+函数式编程的,所以其方法也可以说成是属性。属性和函数都是一等公民,可以相互转换
4.List类的具体实现
sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A, List] with LinearSeqOptimized[A, List[A]] with Serializable { ... }
sealed:进行模式匹配时,List所有具体的子类都必须在List类所在的这个文件中。这样,在进行模式匹配时,scala就知道其所有的实现
List[+A] :元素类型有相应的继承体系,那么List也会有相应的继承体系。eg:因为Any是Int的父类,所以List[Any]是List[Int]的父类
例如:
val list : List[Int] = List(1,2,3,4,5) val listAny : List[Any] = list可以把list赋值给listAny。属于面向接口编程,可以把子类对象赋值给父类变量
二、List方法操作源码
println(list.drop(2))看drop()源码:
override def drop(n: Int): List[A] = { var these = this var count = n while (!these.isEmpty && count > 0) { these = these.tail count -= 1 } these }
scala的丰富多彩造就了其强大的功能特性,后面会逐步讲解。
参考资料来源于大数据梦工厂 深入浅出scala 第41讲 由王家林老师讲解
阅读全文
0 0
- 41.List继承体系实现内幕和方法操作源码揭秘
- scala-41:List继承体系实现内幕和方法操作源码揭秘
- Scala深入浅出进阶经典 第41讲:List继承体系实现内幕和方法操作源码揭秘
- scala-31:Option使用和实现内幕源码揭秘
- 31.Option使用和实现内幕源码揭秘
- 第83讲:Scala中List的实现内幕源码揭秘学习笔记
- 【DT大数据梦工厂视频】《第83讲:Scala中List的实现内幕源码揭秘》
- 第83讲:Scala中List的实现内幕源码揭秘
- Scala深入浅出进阶经典 第83讲:Scala中List的实现内幕源码揭秘
- Scala深入浅出实战经典:31,Option使用和实现内幕源码揭秘
- 65.Scala中隐式转换内幕操作规则揭秘、最佳实践及其在Spark中的应用源码解析
- 黑马程序员---集合体系的继承关系图。顶层接口Collection中的方法,迭代器Iterator使用和原理,List派系特点
- jquery1.11源码学习——揭秘jquery内幕
- 构造器和继承体系
- 构造器和继承体系
- Scala深入浅出进阶经典 第65讲:Scala中隐式转换内幕操作规则揭秘、最佳实践及其在Spark中的应用源码解析
- Visual C# 技术内幕学习笔记 第二章 C#基础(3) 继承和方法
- 内幕视角揭秘那些年的微软和诺基亚
- 伯努利分布、二项分布
- 什么是产品经理?主要职责是什么?
- 回文数(Java)
- 05:素数回文数的个数(1.13编程基础之综合应用)
- HBase
- 41.List继承体系实现内幕和方法操作源码揭秘
- Adapter 中view 的复用的一种优化方案
- rabbit
- idea找不到iml文件解决方案
- 01-QuickBurro入门学习视频__解包安装入门操作
- Valgrind 工具概述
- windows下通过Composer安装Yii2.0
- jsp学习--cookie的使用
- Count the Colors 染色