我的问题很简单。
为什么这个代码会出错,
abstract class A {
type T <: A.Inner
def toT: T = new A.Inner(this)
}
object A {
class Inner(a: A)
}
// Exiting paste mode, now interpreting.
<console>:16: error: type mismatch;
found : A.Inner
required: A.this.T
def toT: T = new A.Inner(this)
^
而这个代码没有?
abstract class A {
type T = A.Inner
def toT: T = new A.Inner(this)
}
object A {
class Inner(a: A)
}
// Exiting paste mode, now interpreting.
defined class A
defined object A
CCD_ 1。不是吗?
这里应该使用下界:
abstract class A {
type T >: A.Inner
def toT: T = new A.Inner(this)
}
object A {
class Inner(a: A)
}
只有当T
是A.Inner
的祖先时,A.内部才能转换为T
。我们用下界来限制T
是A.Inner
的祖先。