我的问题很简单。
为什么此代码会出错,
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
A.Inner <: A.Inner
。不是吗?
答案 0 :(得分:2)
此处,应使用下限:
abstract class A {
type T >: A.Inner
def toT: T = new A.Inner(this)
}
object A {
class Inner(a: A)
}
仅当T
是A.Inner
的祖先时,A.Inner才能转换为T
。我们使用下限来限制T
是A.Inner
的祖先。