随着我对Scala的学习的继续,我对Scala语言中的一些选择很感兴趣。考虑删除静态类。在Java世界中(从我来到的地方),静态成员,单例和实例成员之间存在明显差异。 Java中一直存在对单例的持续需求,静态成员无法真正帮助它。我知道为什么单例可能比静态成员更受欢迎的主要用例是:
在我看来,不 Scala完全解决了单例用例。这将令人失望。
如果我的理解是正确的,那么下一个问题是:我们如何在Scala中启用惰性单例模式?
似乎我们必须与scala斗争以正确的方式获得单身人士!
PS:这不是我的博客
答案 0 :(得分:20)
斯卡拉的单身人士很懒惰。在REPL中尝试以下内容:
scala> object Foo { println("hello") }
defined module Foo
scala> 1+1
res0: Int = 2
scala> Foo
hello
res1: Foo.type = Foo$@37c8ccf4
scala> Foo
res2: Foo.type = Foo$@37c8ccf4
正如您从println中看到的那样,Foo在使用之前不会被初始化。
答案 1 :(得分:0)
TOUR OF SCALA SINGLETON OBJECTS
对象是仅具有一个实例的类。引用时它是惰性创建的,就像一个惰性val。
作为封闭类的成员或作为局部值,它的行为完全类似于惰性val。
下面是演示
scala> object Foo { println("hello") }
defined object Foo
scala> val f = Foo
hello
f: Foo.type = Foo$@2e26173
scala> object Foo { println("hello") }
defined object Foo
scala> lazy val f = Foo
f: Foo.type = <lazy>
scala> f
hello
res0: Foo.type = Foo$@7bf018dd