scala self类型在使用`extends`时真的可以编译吗?

时间:2014-12-18 17:07:25

标签: scala

我正在查看scala types of types self types annotation

它表示new Service无法实例化,因为使用self type支持extends。但是我也用extends尝试了这个例子,它仍然没有编译。

class TryMe {
  class ServiceInModule {
    def doTheThings() = "dfdf"
  }
  trait Module {
    lazy val serviceInModule = new ServiceInModule
  }

  trait Service extends Module {
    def doTheThings() = serviceInModule.doTheThings()
  }

  trait TestingModule extends Module {

  }

  new Service
}
  

错误:(22,3)特质服务是抽象的;无法实例化新的   服务^

我错过了什么吗?为什么声称扩展它应该编译?它没有编译......

1 个答案:

答案 0 :(得分:3)

特征就像java中的增强界面,不能直接创建。你需要对它进行子类化,这是你通过添加{}。

所做的

所以你需要做

new Service {}

并且您创建的不是Service的实例,而是创建扩展Service trait的“匿名类”