在 Scala 中,可以使用泛型类型参数上的 + 和 - 等方差运算符来定义方差。例如,List
类型在标准库中是协变的。
class List[+A]
因此,可以像这样定义具有协变列表的函数:
def foo[A](list : List[A])
方差也可以用通用边界来模拟。所以我们也可以这样写
def foo[A](list : List[_:< A])
当然这没有意义,因为list
已经是协变的。但同样的技巧也可以用于非协变的类型。(如Stack
)。当然,也可以从协变的堆栈(聚合的继承)创建新类型。
所以我的问题:
- 什么时候应该对方差使用通用界限?我们什么时候应该创建一个新的协变类型?
- 通用边界是否仅对方差有用,或者它们可以声明更多(语言概念)。
- 如果它们仅对方差有用,那么边界是否仅用于与 Java 兼容?
提前谢谢:)