В Scala, как я могу расширить признак в классе с private параметр конструктора, определенный в признаке?Расширить черту с параметром частного конструктора
trait Parent {
protected def name: String
require(name != "", "wooo problem!")
}
class Child(private val name: String) extends Parent {
println("name is " + name)
}
выше класс выдает ошибку:
class Child needs to be abstract, since method name in trait Parent of type ⇒ String is not defined.
Из курса я могу:
- сделать
Child
класса аннотацию, - определить его без использования частного в конструктор, как
class Child(val name: String)
. - сделать Родительскую
abstract class
вместо признака
Но с вышеприведенной реализацией, не существует никакого способа, я могу иметь частный параметр конструктора, расширяя черту? Обратите внимание, что я хочу, чтобы переменная была закрытой, чтобы я не смог сделать childInstance.name
.
Что вы пытаетесь достичь с этим? Зачем нужен конструктор с частной переменной? Не можете ли вы просто определить приватную переменную в классе и иметь пустой конструктор? – nmat
Поскольку этот класс расширяется несколькими детьми, я не хочу повторять код. Я думаю, что нашел способ. Если я сделаю переменную в признаке 'protected' и изменим дочерний конструктор на' Child (name: String) ', я не могу получить доступ к переменной снаружи. Это достаточно хорошо для меня! – rgamber
Почему бы вам просто не задать 'class Child {private val name =" "}'? – nmat