<
Scala 类型系统预热
>
上一篇

Scala 类型系统01:从参数化类型讲起
下一篇

欢迎来到喵君的实验室

在 Scala 中,泛型被称为参数化类型,使用 [] 代替 java 中的 <>

1 协类型

List[+A]:如果 B 是 A 的子类,那么 List[B] 也是 List[A] 的子类,被称为协类型。

2 逆类型

List[-A]: 如果 B 是 A 的子类,且声明List[-A],则 List[B] 将作为 List[A] 的父类,被称为逆类型

3 抽象类型成员

以 type 关键字指定某名称为抽象类型,之后可以将参数的类型指定为它

type A
val foo: A

abstract class Foo[A] {
  val bar: A
}

在下文中(比如子类)可指定 A 的具体类型

type A = String

class Baz extend Foo[String]

这又被称为家族多态,或协特化

为什么要使用抽象类型成员?

抽象类型适用的范围:

eg: List[A],A 可能是 String Int 或 Person 等,但决定 List 如何运作的是 List 本身,跟容器内元素无关

比如定义一个 Reader 类,要对不同类型的 source 参数分别封装,此时适合将其设置为抽象类型参数。

Top
Foot