[英]Type parameter for classes implementing trait disregarding trait parameters
我有一個帶有類型參數的特征,它有一個列表,其中包含實現此特征的另一個類的實例。 我不關心這些實例的類型參數,所以我嘗試定義一個類型,允許任何子類使用任何類型參數實現特征。
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)
首先,從你的問題中不清楚你是如何使用這個特性的。 我想你可能想要這樣的東西:
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
語句。 例如:
trait Synchronizable[A,B] {
type S <: Synchronizable[_, _]
val slaves = MutableList.empty[S] // Create list in trait.
def synchronizeWith(q: S) = {
if (!slaves.contains(q)) slaves += q
}
}
class SomeClass[A, B]
extends Synchronizable[A, B] {
override type S = SomeClass[_, _]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.