hangscer

自适应类型

2017/02/11

5.自适应类型

静态类型,又称编译时类型检查。
Nothing是最底层的子类
Any是所有类型的基类型

5.2 Any类型

20170106类型体系
在Scala中,Any可以持有对任何类型的引用。Any一个抽象类,具有如下方法:

  • !=
  • ==
  • asInstanceOf
  • equals
  • hashCode
  • isInstanceOf
  • toString

Any的直接后代是AnyValAnyRefAnyVal是比如IntDouble等映射为Java基础类型的Scala类型的基类。

AnyRef是所有引用类型的基类,映射为Java的ObjectAnyVal没有额外方法,AnyRef则包含Java的Object方法。

在虚拟机中,AnyRef直接映射为Object,Any和AnyVal则是通过类型擦除成了Object。

5.4 Option类型

返回null有两个问题:

  1. 无法显式表达出“我就是希望没有结果”的一处
  2. 无法强迫调用者对不存在null进行检查Option[T]

5.7 参数化类型的可变性

比如Dog extends Pet
那么List[Gog]List[Pet],有点像Java的范型上下限。
[T<:Pet]T为所有派生来自Pet的类,上界含有Pet。
[D>:S]D限制为S的超类型,S为D的下界,D可以为类型S或其超类的任意类型。
[+T]告诉编译器,允许协变,允许接收这个类型或者其基类型
[-T]允许逆协变