相关疑难解决方法(0)

无法覆盖具有非易失性上限的类型


我在scala中有一个编译器错误,我不知道它引用了什么:
假设这些声明:

trait Abstract {
  type MyType
}
trait AInner
trait A extends Abstract{
  type MyType <: AInner
}
trait BInner {
  def bMethod : Int
}
trait B extends Abstract with A{
  override type MyType <: BInner with A#MyType
}
Run Code Online (Sandbox Code Playgroud) 我在这里尝试实现的(在trait中B)是进一步限制MyType声明的类型Abstract,因此任何类型的值都MyType必须扩展MyTypemixin树中的所有s.

编译器给我这个消息(如标题所示): 类型MyType是一个易失性类型; 不能覆盖具有非易失性上限的类型.我理解,类型易变性在这里发生是因为类型连接with A#MyType,错误的一部分:具有非易失性上限的类型可能是指类型声明type MyType <: AInner,其中AInner不是抽象类型,因此是非易失性的.

为什么我不能这样做?有办法,如何实现我的目标?

types scala volatility type-bounds non-volatile

9
推荐指数
1
解决办法
945
查看次数

标签 统计

non-volatile ×1

scala ×1

type-bounds ×1

types ×1

volatility ×1