Я довольно новичок в Scala, исходя из базового фона Java. Я посмотрел, как реализовать конструкторы классов и как обеспечить некоторую логику в установщике для поля этого класса.Class Constructor/Setter
class SetterTest(private var _x: Int) {
def x: Int = _x
def x_=(x: Int) {
if (x < 0) this._x = x * (-1)
}
}
Параметр конструктора присваивается поле _x
, поэтому связующий не используется. Что делать, если я хочу использовать логику сеттера?
object Test {
def main(args: Array[String]) {
val b = new SetterTest(-10)
println(b.x) // -10
b.x = -10
println(b.x) // 10
}
}
В Java я мог бы использовать установщик в конструкторе для принудительного использования этого образца куска логики.
Как я могу достичь этого в scala?
Да, это одна из болевых точек в Scala. У вас может быть короткий короткий код без сеттеров или какой-то Java-подобный раздутый с сеттерами. Проблема заключается в том, что компилятор не распознает его, если вы сами определяете настройки/getters и не сработаете с некоторым невольным сообщением об ошибке. Кроме того, установка членов класса через конструктор обходит любой определенный метод setter, нарушая принцип унифицированного доступа. Это один из темных пятен Scala ... – soc
@ pelotom: Спасибо за быстрое решение. @soc +1 для приведения дальнейших мыслей, чтобы помочь мне оценить, что я изучаю. – rdoubleui