Невозможно сделать метод внутреннего объекта закрытым для внешнего - PullRequest
1 голос
/ 28 ноября 2011

В следующем примере я не могу скрыть 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 голосов
/ 28 ноября 2011

Глупый обходной путь:

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
}

Должен ли я сообщить об ошибке?

...