实现特征的类的参数,忽略特征参数

时间:2017-10-30 19:18:45

标签: scala types traits type-parameter

我有一个带有类型参数的特征,它有一个列表,其中包含实现此特征的另一个类的实例。我不关心那些实例的类型参数,所以我尝试定义一个类型,允许任何子类使用任何类型参数实现特征。

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)

1 个答案:

答案 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