Я пишу трейт
, который должен указывать метод 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
}
... но это похоже на взлом. Есть предложения?