Scala 对具有类型参数的类进行子类化
在scala中尝试一些基本的绘图工具,遇到了一些我认为社区可以帮助的东西 首先。我定义了一个图形特征Scala 对具有类型参数的类进行子类化,scala,Scala,在scala中尝试一些基本的绘图工具,遇到了一些我认为社区可以帮助的东西 首先。我定义了一个图形特征 trait GraphLike[T] { ... } 还有一个小班 class DiGraph[T] extends GraphLike[T] { ... } 我还有一个“面包优先搜索”类,看起来像这样: class BreadthFirstSearch[ T ]( val graph: GraphLike[T], val sourceVertex: T ) extends Graphsea
trait GraphLike[T] { ... }
还有一个小班
class DiGraph[T] extends GraphLike[T] { ... }
我还有一个“面包优先搜索”类,看起来像这样:
class BreadthFirstSearch[ T ]( val graph: GraphLike[T], val sourceVertex: T ) extends Graphsearch.GraphSearch[ T ]{
我试着在另一个类中使用它,看起来像这样:
class SAP[T]( val graph: DiGraph[T]) {
class inSap[T]( val v: T, val w: T )
{
val bfsV = new BreadthFirstSearch[T](graph, v)
}
}
调用new BroadthFirstSearch时遇到编译器错误
BroadthFirstSearch采用类似于图形的参数。SAP类有一个graph:DiGraph[T],DiGraph是GraphLike的子类,因此我希望能够使用DiGraph类型的graph参数调用BreadthFirstSearch的构造函数,因为DiGraph是GraphLike
但是,编译器说:
type mismatch; found : com.KGraph.DiGraph[T(in class SAP)] required: com.KGraph.GraphLike[T(in class
inSap)]
我不喜欢用子类有向图代替图形。你知道为什么会这样吗?我猜这可能与类型参数有关。所有类在类型参数上都是不变的
我认为除了类构造函数定义之外,不需要其他任何东西来帮助解决这个问题,但是,如果需要更多的代码来解决问题,请更新,我将提供代码 定义内部类时:
class inSap[T]( val v: T, val w: T )
您引入了第二个类型变量
T
。因此,当您调用new BreadthFirstSearch[T]
时,它使用的是inSap
中的T
,而不是SAP
中的T
。您应该只需要从inSap
中删除类型参数,以便在该类中,T
只引用外部范围中的类型。定义内部类时:
class inSap[T]( val v: T, val w: T )
您引入了第二个类型变量T
。因此,当您调用new BreadthFirstSearch[T]
时,它使用的是inSap
中的T
,而不是SAP
中的T
。您应该只需要从inSap
中删除类型参数,以便在该类中,T
只引用外部范围中的类型