我对 Scala 泛型和方差一无所知,我无法理解某些事情。
这是我到目前为止所拥有的:
sealed abstract class Tree[+T]
case class Node[+T](value: T, left: Tree[T], right: Tree[T]) extends Tree[T] {
override def toString = "T(" + value.toString + " " + left.toString + " " + right.toString + ")"
}
case object End extends Tree[Nothing] {
override def toString = "."
}
object Node {
def apply[T](value: T): Node[T] = Node(value, End, End)
}
一个基本的泛型二叉树。我想要做的是专门化它,所以它T
是某个类的子类型 say Rectangle
。我想这样做的原因是创建一个addValue
使用某些方法的方法Rectangle
(即它是一个使用某些东西的树Rectangle
):
sealed abstract class Tree[+T] {
def addValue
}
我知道我可以Ordering
在矩形上定义并这样做:
sealed abstract class Tree[+T] {
def addValue[U >: T <% Ordered[U]](x: U): Tree[U]
}
但我觉得有一种更简单的方法可以限制T
为Rectangle
.