给定以下类型层次结构:
sealed trait Edge[T]
sealed trait WeightedEdge[T] extends Edge[T]
sealed abstract class AbstractUndirectedEdge[T] extends Edge[T]
case class UndirectedEdge[T](...) extends AbstractUndirectedEdge[T]
case class UndirectedWeightedEdge[T](...) extends AbstractUndirectedEdge[T] with WeightedEdge[T]
case class DirectedEdge[T](...) extends Edge[T]
case class DirectedWeightedEdge[T](...) extends WeightedEdge[T]
sealed abstract class GraphBuilder[V, E <: Edge[V]]
sealed class UndirectedGraphBuilder[V, E <: AbstractUndirectedEdge[V]] extends GraphBuilder[V, E]
sealed class DirectedGraphBuilder[V, E <: DirectedEdge[V]] extends GraphBuilder[V, E]
我想创建一个生成器方法,动态地确定返回哪个具体的生成器实例。
def newBuilder[V, E <: Edge[V]](implicit tag: TypeTag[E]): GraphBuilder[V, E] = {
tag.tpe match {
case x if x <:< typeOf[DirectedEdge[V]] => new DirectedGraphBuilder[V, E]()
case _ => new UndirectedGraphBuilder[V, E]()
}
}
上面的内容无法编译。
错误:(119,29)没有可用于
DirectedEdge[V]案例x如果x<:<typeOf[DirectedEdge[V]]=>新建DirectedGraphBuilder[V,E]()
错误:(119,29)没有足够的参数
方法类型:(隐式ttag:
反射.runtime.universe.TypeTag[directedge[V]])反射.runtime.universe。类型。
案例x如果x<:<typeOf[directedge[V]]=>new DirectedGraphBuilder[V,E]()