13

我正在查看与 Akka 相关的类型安全激活器代码,以下构造引起了我的兴趣:

伴侣对象:

object MarkerActor {
  sealed trait MarkerMessage
  case object Stop extends MarkerMessage
   ..
  def objectMethod = print("hi from companion object")
}

伴生类:它导入伴生对象方法:

class MarkerActor extends Actor with ActorLogging {
    import MarkerActor._   // Comment this line to compare w or w/o import available

    objectMethod  // just to see if 'visible' within companion class

    override def receive = {
      case Stop => {

所以..这有点令人惊讶。为什么伴随类/对象之间没有“特殊关系”允许类自动“看到”对象方法?

更新 我对此有点怀疑,所以继续注释掉“import MarkerActor._”这导致 Companion Class 中出现“Symbol not found: Stop”错误。所以..确实需要导入。

4

1 回答 1

20

几年前,关于是否将所有伴生对象成员隐式导入其父类的讨论。当时做出的决定(今天仍然有意义)是要求显式导入,因为添加额外的导入比删除不需要的导入更容易。这是完整的讨论

于 2014-05-18T23:28:58.457 回答