Scala:具有上界的类型别名的类型匹配



我的问题很简单。

为什么这个代码会出错,

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)
}

只有当TA.Inner的祖先时,A.内部才能转换为T。我们用下界来限制TA.Inner的祖先。

相关内容

  • 没有找到相关文章

最新更新