Как я могу создать член класса только для чтения в 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
Ограничьте видимость этого класса соответствующим образом.
Наличие выделенного интерфейса позволяет также использовать несколько классов реализации во время выполнения, например. более эффективное покрытие особых случаев, ленивая загрузка и т.д.