Scala-编写非泛型树。类型参数问题

Scala-编写非泛型树。类型参数问题,scala,generics,tree,variance,Scala,Generics,Tree,Variance,我对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 + ")" }

我对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
是某个类的子类型,比如
Rectangle
。我之所以要这样做,是为了创建一个
addValue
方法,该方法使用了
Rectangle
的一些方法(即,它是一个使用
Rectangle
中某些内容的树):

我知道我可以在矩形上定义
排序
,并执行以下操作:

sealed abstract class Tree[+T] {
  def addValue[U >: T <% Ordered[U]](x: U): Tree[U]
}
密封抽象类树[+T]{

def addValue[U>:T要将泛型类型
T
限制为
矩形的子类型
,请使用
我不明白问题是什么,您喜欢使用非泛型类型解决。您只显示一个可以解决的示例,并自己提供解决方案。
sealed abstract class Tree[+T] {
  def addValue[U >: T <% Ordered[U]](x: U): Tree[U]
}
class Rectangle
class GenericThing[T <: Rectangle](x: T)

new GenericThing(new Rectangle) // fine
new GenericThing(5) // inferred type arguments [Int] do not conform to class GenericThing's type parameter bounds [T <: Rectangle]