这编译:
import scala.collection._
trait Foo[A, +This <: SortedSet[A] with SortedSetLike[A,This]]
extends SortedSetLike[A, This] { this: This =>
def bar: This = (this: SortedSetLike[A,This]).empty
}
但是,如果删除了 upcast,它将无法编译:
import scala.collection._
trait Foo[A, +This <: SortedSet[A] with SortedSetLike[A,This]]
extends SortedSetLike[A, This] { this: This =>
def bar: This = this.empty
}
为什么?从extends
子句中我们知道那Foo
是 a SortedSetLike[A, This]
,所以向上转换当然是有效的——但这不是表明编译器允许发生冲突继承吗?