在 Scala 中,泛型被称为参数化类型,使用 [] 代替 java 中的 <>
List[+A]:如果 B 是 A 的子类,那么 List[B] 也是 List[A] 的子类,被称为协类型。
List[-A]: 如果 B 是 A 的子类,且声明List[-A],则 List[B] 将作为 List[A] 的父类,被称为逆类型。
以 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 参数分别封装,此时适合将其设置为抽象类型参数。