bb9*_*b94 2 types scala compiler-errors cyclic-reference
我无法使用此代码.我想打一个特点,允许继承它有"孩子"一类,但显然,Child的setParent方法想要一个P,但是却能得到Parent[P, C]代替.
package net.fluffy8x.thsch.entity
import scala.collection.mutable.Set
trait Parent[P, C <: Child[C, P]] {
protected val children: Set[C]
def register(c: C) = {
children += c
c.setParent(this) // this doesn't compile
}
}
trait Child[C, P <: Parent[P, C]] {
protected var parent: P
def setParent(p: P) = parent = p
}
Run Code Online (Sandbox Code Playgroud)
您需要使用自我类型来指示this是否P存在Parent[P, C].这还需要额外的界限P <: Parent[P, C]和C <: Child[C, P]
trait Parent[P <: Parent[P, C], C <: Child[C, P]] { this: P =>
protected val children: scala.collection.mutable.Set[C]
def register(c: C) = {
children += c
c.setParent(this)
}
}
trait Child[C <: Child[C, P], P <: Parent[P, C]] { this: C =>
protected var parent: P
def setParent(p: P) = parent = p
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |