首先我们从最基本的泛型来看:
scala类型系统:24) 理解 higher-kinded-type_类型参数

现在我们对上面泛型中的类型参数再进一步,也是个泛型会如何呢?
scala类型系统:24) 理解 higher-kinded-type_类型参数_02

可以看到,java中不支持类型参数也是泛型类型的情况,而scala支持。这是一个很重要的区别,scala在类型系统上要比java强大。我们现在简单对类型归纳一下,可以分为两类:

1)特定类型(proper type)
    比如 Int, String, List[Int], List2[List] 等类型

2) 泛型类型:用于构造特定类型(proper type)的类型
    比如 List, List2 等类型

scala类型系统:24) 理解 higher-kinded-type_类型参数_03

现在我们来看 higher-kinded-type ,先要理解 kind 是什么意思,如果说类型(type)是对数据的抽象,比如1,2,3等抽象为Int类型,”hello”,”wolrd”等可抽象为String类型。那么kind则是对类型的抽象。

scala类型系统:24) 理解 higher-kinded-type_java_04

proper type 用 * 号表示:
scala类型系统:24) 理解 higher-kinded-type_类型参数_05

泛型类型(用于构造proper type的类型)则可以用下面的方式表示,比如 Set[T], List[T],

Set 和 List 都是通过传递一个特定类型(proper type)然后构造出一个特定类型(proper type),用kind表示为:
* -> *

再如 Pair[K,V] 泛型类型

Pair 通过传递2个特定类型(proper type)然后构造出一个特定类型(proper type), 用kind表示为:
(*,*) -> *

scala类型系统:24) 理解 higher-kinded-type_scala_06

如果泛型类型中的参数类型又是一个泛型,比如前边的 List2

List2 通过传递一个泛型类型(类型构造器),然后构造出一个特定类型,用kind表示为:
(*->*) -> *

scala类型系统:24) 理解 higher-kinded-type_java_07

这种类型参数也是泛型类型的类型,称之为高阶(higher)kind,是不是很像高阶函数?借用这张图做个汇总:

scala类型系统:24) 理解 higher-kinded-type_泛型类型_08

http:///scala-higher-kinded-type/

------------------越是喧嚣的世界,越需要宁静的思考------------------ 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。 积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。