Scala类型系统的深度解析
1 统一类型系统
Scala拥有一个统一的类型系统,该系统由位于层次结构顶部的类型 Any
和位于层次结构底部的类型 Nothing
所界定。所有 Scala 类型都继承自 Any
。 Any
的子类型包括 AnyVal
(值类型,例如 Int
和 Boolean
)和 AnyRef
(引用类型,类似于 Java 中的对象)。Java 的基本类型被包含在 AnyVal
下,与 Java 不同的是,你可以定义自己的 AnyVal
。同样与 Java 不同的是,Scala 没有像 Integer
这样的包装类型来与基本类型(如 int
)区分开来。
下图展示了统一的对象模型:
graph TD;
Any --> AnyRef;
Any --> AnyVal;
AnyRef --> String;
AnyRef --> Object;
AnyVal --> Int;
AnyVal --> Boolean;
AnyVal --> Double;
由于这种层次结构,定义接受 Any