Class(类)与Type(类型)是两个不一样的概念(java中,一直使用class表达type,现在也延续了这样的习惯)。
(Type-普遍性)Type比Class更”具体”,任何数据都有type。
(Class-局限性)Class是面向对象系统里,对同一类数据的抽象。
在没有泛型之前,类型系统(Type System)不存在高阶类型概念(Higher-Kinded Type),直接与类(Class)一一映射;泛型出现之后,就不再一一映射了。例如,class List[T]
的具体类型(type),根据不同的类型参数,可以有List[Int]
、List[String]
… etc;但类(class)只有一个List
。
类型(type)一致的对象,其类(class)一致;类(class)一致的对象,其类型(type)不一定一致。
import scala.reflect.runtime.universe._
classOf[List[Int]] == classOf[List[String]] // true
# class scala.collection.immutable.List
typeOf[List[Int]] == typeOf[List[String]] // false
# scala.List[Int], scala.List[String]
(Type System)类型系统是所有语言都有的概念,一切数据都有(Type)类型。(Class)类更多存在于面向对象语言,非面向对象也有“结构体”等与之相似的概念;(Class)类是对数据的抽象,而(Type)类型是对数据的“分类”。