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

发布于 2024-11-10 16:54:30 字数 112 浏览 1 评论 0原文

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

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

I want to create a Scala class where one of its var is read-only from outside the class, but still a var. How can I do it?

If it was a val, there was no need to do anything. By default, the definition implies public access and read-only.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

妳是的陽光 2024-11-17 16:54:30

将公共“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 = 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
           ^

Define a public "getter" to a private 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 = 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
           ^
命比纸薄 2024-11-17 16:54:30

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

特征 Foo {
定义栏:T
}

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

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

适当限制此类的可见性。

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

Define a trait with the "getter" method:

trait Foo {
def bar: T
}

Define a class which extends this trait, and which has your variable

private class FooImpl (var bar: T) extends Foo

Restrict the visibility of this class appropriately.

Having a dedicated interface allows you also to use multiple implementation classes at runtime, e.g. to cover special cases more efficiently, lazy loading etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文