4

嗨,我遇到了这段代码,但无法理解。令人困惑的地方是“V <: Vector[V]”,这意味着 V 是 Vector[V] 的子类型?这里非常混乱。

trait Vector[V <: Vector[V]] { this: V =>
  def +(other: V): V
}
4

1 回答 1

6

它被称为F 有界类型多态性

当有人试图解决面向对象语言中的一个常见抽象问题时,通常会尝试:如何定义一个多态函数,尽管它是根据超类型定义的,但当传递某个子类型的值时,它总是返回一个值与其参数相同的子类型。

(摘自Kris Nuttycombe最近的一篇博文“ F-Bounded Type Polymorphism Considered Tricky ” )

另请参阅这个 SO 问题:泛型中的“递归类型绑定”是什么意思?

于 2012-12-25T06:32:56.080 回答