如何在Scala中创建只读类成员?

时间:2011-05-31 16:28:14

标签: scala variables member

我想创建一个Scala类,其中一个 var 是从类外部只读的,但仍然是一个var。我该怎么办?

如果是val,则无需做任何事情。默认情况下,该定义意味着公共访问和只读。

2 个答案:

答案 0 :(得分:34)

为私人var定义公开的“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
           ^

答案 1 :(得分:1)

使用“getter”方法定义特征:

  

特质Foo {   def bar:T   }

定义一个扩展此特征的类,其中包含您的变量

  

私有类FooImpl(var bar:T)扩展了Foo

适当限制此课程的可见性。

拥有专用接口允许您在运行时使用多个实现类,例如更有效地覆盖特殊情况,延迟装载等。