Scala: Указание открытого метода, переопределяющего защищенный метод

Я пишу трейт , который должен указывать метод clone , возвращающий CloneResult , как Итак:

trait TraitWithClone extends Cloneable {
  def clone: CloneResult
}

Цель состоит в том, чтобы сузить тип возвращаемого значения java.lang.Object clone () до чего-то полезного для этого интерфейса. Однако, когда я пытаюсь скомпилировать это, я получаю:

error: overriding method clone in trait View2 of type () CloneResult; clone метода в классе Object типа () java.lang.Object имеет более слабые права доступа; он должен быть публичным; (Обратите внимание, что метод clone в трейте View2 типа () CloneResult является абстрактным, и поэтому переопределяется конкретным клоном метода в классе Object типа () java.lang.Object)

Как я могу потребовать, чтобы реализация была общедоступной , если в Scala нет ключевого слова? Я знаю, что могу:

trait TraitWithClone extends Cloneable {
  override def clone = cloneImpl
  protected def cloneImpl: CloneResult
}

... но это похоже на взлом. Есть предложения?

7
задан Kenneth Allen 23 December 2011 в 17:29
поделиться