Как я могу создать член класса только для чтения в Scala?

Я хочу создать класс Scala, где один из его var доступен только для чтения извне класса, но все равно var. Как я могу это сделать?

Если это был вал, ничего не нужно было делать. По умолчанию определение подразумевает открытый доступ и доступ только для чтения.

Ответы

Ответ 1

Определите публичный "getter" для частного var.

scala> class Foo {
     |   private var _bar = 0
     |
     |   def incBar() { 
     |     _bar += 1 
     |   }
     |
     |   def bar = _bar
     | }
defined class Foo

scala> val foo = new Foo
foo: Foo = [email protected]

scala> foo.bar
res0: Int = 0

scala> foo.incBar()

scala> foo.bar
res2: Int = 1

scala> foo.bar = 4
<console>:7: error: value bar_= is not a member of Foo
       foo.bar = 4
           ^

Ответ 2

Определите признак с методом "getter":

trait Foo { def bar: T }

Определите класс, который расширяет этот признак и который имеет переменную

частный класс FooImpl (var bar: T) расширяет Foo

Ограничьте видимость этого класса соответствующим образом.

Наличие выделенного интерфейса позволяет также использовать несколько классов реализации во время выполнения, например. более эффективное покрытие особых случаев, ленивая загрузка и т.д.