不可能将内部对象的方法私有化为外部

时间:2011-11-28 03:05:39

标签: scala private-members

在以下示例中,我无法隐藏update公开曝光:

trait Order {
  sealed trait EntryOption {
    private[Order] def update(e: EntryOption): Unit
  }

  private case object EmptyEntry extends EntryOption {
    def update(e: EntryOption) = ()
  }

  trait Entry extends EntryOption

  def test(a: Entry, b: EntryOption): Unit = a.update(b)
}

无法使用"error: object creation impossible, since method $line12$$read$Order$^date in trait EntryOption of type (e: Order.this.EntryOption)Unit is not defined进行编译 - 无论应该是什么(编译器错误?)。我尝试了以下内容但没有成功:

  • 同时在update EmptyEntry
  • 中制作private[Order]
  • 设为protected - 这会中断方法test

目标是让EntryOption update无法从外部Order访问。

修改

如果我暂时将trait Order更改为object Order,它会编译,表明存在潜在的编译错误?

1 个答案:

答案 0 :(得分:0)

愚蠢的解决方法:

trait Order {
  sealed trait EntryOption {
    private[Order] def update(e: EntryOption): Unit
  }

  private sealed trait ScalaChokes extends EntryOption {
    private[Order] final def update(e: EntryOption) = ()
  }

  private case object EmptyEntry extends ScalaChokes

  trait Entry extends EntryOption
}

我应该提交错误吗?