我希望创建一个Scala类,其中一个var在类外只读,但仍然是变量。如何做到这一点?
如果它是val,则不需要做任何操作。默认情况下,定义意味着公共访问和只读。
定义一个公共的"getter"方法来访问私有变量。
scala> class Foo {
| private var _bar = 0
|
| def incBar() {
| _bar += 1
| }
|
| def bar = _bar
| }
defined class Foo
scala> val foo = new Foo
foo: Foo = Foo@1ff83a9
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
^
使用“getter”方法定义一个特质:
trait Foo { def bar: T }
定义一个扩展该特质的类,并具有您的变量
private class FooImpl (var bar: T) extends Foo
适当限制此类的可见性。
拥有专用接口还允许您在运行时使用多个实现类,例如更高效地覆盖特殊情况、延迟加载等。