在scala中,为什么类中的别名不能被引用继承?

时间:2017-01-02 22:44:37

标签: scala inheritance type-alias

我定义了以下类:

文件:PyRef.scala:

package mypackage
class PyBinding() {
...
}

trait PyRef {

  type Binding = PyBinding
}

文件:Link.scala:

class Link() extends PyRef {

  override type Binding = Link.PyBindingImpl
}

object Link {
  class PyBindingImpl() extends PyRef#Binding() {
  }
}

在编译中,抛出了以下错误:

Error:(222, 34) class type required but mypackage.PyBinding found
                 ) extends PyRef#Binding() {

为什么会发生这种情况,我该怎么做才能绕过它呢?我使用的是Scala 2.10。

1 个答案:

答案 0 :(得分:0)

我不认为您可以在Scala中使用类型投影A#B作为可实例化的类类型。以下两件事有效

trait Link {
  class PyBindingImpl() extends PyBinding()
}

trait Link {
  val ref: PyRef

  class PyBindingImpl() extends ref.Binding()
}