【问题标题】:Scala: Creating singleton object by calling constructorScala:通过调用构造函数创建单例对象
【发布时间】:2016-02-24 03:40:04
【问题描述】:

我想为我的应用程序创建一个单例对象,但我想从另一个对象初始化它。

例如:

object A{
 val x = 10
 val b = B(x)
}

object B(y:Int){
var z = y
}

但这行不通,因为对象没有构造函数。 我需要从另一个对象初始化对象,因为 val x (在上面的例子中)在运行时是已知的。

有什么解决方法吗?

【问题讨论】:

标签: scala scala-collections


【解决方案1】:

对象没有构造函数,因为它是静态初始化的(一旦加载)。您可能正在寻找的是一个普通的类:

class B(y: Int) {
  var z = y
}

如果你真的需要一个单例,为什么需要从不同的对象初始化它?

【讨论】:

  • 我需要从另一个对象初始化它,因为在运行时会知道单例对象的属性。并且应用程序需要有一个单例对象
  • 那你为什么不简单地在创建另一个对象时改变属性的值呢?
  • 这是一个选项。但我在想是否有更清洁的方法。感谢您的建议:)
【解决方案2】:

scala 中的对象是延迟加载的,这意味着它们只会在需要时被实例化。

如果你在想要的构造函数调用之前不使用对象,你可以简单地用一个 init 函数作为构造函数,然后对象将被实例化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2019-07-25
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多