Я пишу trait
, в котором должен быть указан метод clone
, возвращающий CloneResult
, вот так:
trait TraitWithClone extends Cloneable {
def clone: CloneResult
}
Намерение здесь состоит в том, чтобы ужесточить тип возвращаемого значения java.lang.Object
s clone()
к чему-то полезному для этого интерфейса.Однако, когда я пытаюсь это скомпилировать, я получаю:
error: переопределение метода clone в признаке View2 типа () CloneResult;метод clone в классе Object типа () java.lang.Object имеет более слабые права доступа;оно должно быть публичным;(Обратите внимание, что метод clone в признаке View2 типа () CloneResult является абстрактным и, следовательно, переопределяется конкретным методом clone в классе Object типа () java.lang.Object)
Как я могу требоватьчто реализация будет public
, когда у Scala нет ключевого слова?Я знаю, что могу сделать:
trait TraitWithClone extends Cloneable {
override def clone = cloneImpl
protected def cloneImpl: CloneResult
}
... но это похоже на взлом.Есть предложения?