Вопреки всем ответам выше, это на самом деле вполне выполнимо в Scala без написания каких-либо специальных классов-оболочек.
Сначала вам нужно знать, что для любого не закрытого класса var, такого как используемыев исходном вопросе Scala автоматически генерирует геттеры и сеттеры.Поэтому, если у нас есть переменная с именем «color», Scala автоматически создает метод получения с одноименным названием «color» и метод установки с именем «color _ =».
Далее необходимо знать, что Scala позволяет получить ссылку на любойметод, вызывая специальный метод "_" для него (который требует места перед ним для устранения неоднозначности).
Наконец, собрав эти факты, вы можете легко получить безопасную для типов ссылку на любой метод получения / установки var и использовать эту ссылку для динамической установки / получения значения этой переменной:
class Foo {
var x = 0
}
object Foo {
def setField[T](setter: T => Unit, value: T) {setter(value)}
def getField[T](getter: () => T ) = {getter()}
}
val f = new Foo
val xsetter = f.x_= _
val xgetter = f.x _
Foo.setField(xsetter, 3)
println(f.x) //prints 3
println(Foo.getField(xgetter)) //prints 3