我有一个带有类型参数的特征,它有一个列表,其中包含实现此特征的另一个类的实例。我不关心那些实例的类型参数,所以我尝试定义一个类型,允许任何子类使用任何类型参数实现特征。
trait Synchronizable[A,B] {
type S <: Synchronizable[_,_]
val slaves: MutableList[S]
def synchronizeWith(q: S) = {
if (!slaves.contains(q)) slaves += q
}
}
但由于某些特定实例不符合此类型定义,因此无法编译。
[error] found : TwoBuffers.this.faster.type (with underlying type model.collection.SynchronizableTimeSeriesBuffer[someCaseClass ,Option[Any]])
[error] required: TwoBuffers.this.slower.S
[error] slower.synchronizeWith(faster)
答案 0 :(得分:1)
首先,从您的问题中不清楚您是如何使用此特性的。我想你可能会想要这样的东西:
'Enter at least 1 ISBN to produce'
或者,如果您确实需要使用trait Synchronizable[A,B] {
type S = Synchronizable[_, _] // Note =, not <:
val slaves = MutableList.empty[S] // Create list in trait.
def synchronizeWith(q: S) = {
if (!slaves.contains(q)) slaves += q
}
}
声明,则需要覆盖子类中的type S <: Synchronizable[_, _]
语句。例如:
type