Как в Scala расширить трейт в классе с помощью параметра конструктора private, который определен в трейте?
trait Parent {
protected def name: String
require(name != "", "wooo problem!")
}
class Child(private val name: String) extends Parent {
println("name is " + name)
}
Вышеупомянутый класс дает ошибку:
Класс Child должен быть абстрактным, поскольку имя метода в трейте Parent типа ⇒ String не определено.
Конечно, я могу:
- сделать
Child
класс абстрактным, - определить его, не используя частное в конструкторе, например
class Child(val name: String)
. - сделать Родителя
abstract class
вместо черты
Но с помощью вышеупомянутой реализации я не могу иметь параметр конструктора private при расширении признака? Обратите внимание, что я хочу, чтобы переменная была закрытой, чтобы я не мог делать childInstance.name
.
protected
и изменю дочерний конструктор наChild(name: String)
, я не смогу получить доступ к переменной снаружи. Для меня этого достаточно! - person rgamber   schedule 27.01.2017class Child{ private val name = "" }
? - person nmat   schedule 27.01.2017