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

18

我希望创建一个Scala类,其中一个var在类外只读,但仍然是变量。如何做到这一点?

如果它是val,则不需要做任何操作。默认情况下,定义意味着公共访问和只读。

2个回答

36

定义一个公共的"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
           ^

2
谢谢。不幸的是,这是唯一的解决方案 :( 这很糟糕,因为真实名称变得很混乱。比暴露我的内脏要好。谢谢。 - Guilherme Silveira

2

使用“getter”方法定义一个特质:

trait Foo { def bar: T }

定义一个扩展该特质的类,并具有您的变量

private class FooImpl (var bar: T) extends Foo

适当限制此类的可见性。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接