Scala中的单例概念

Scala中的单例概念,scala,Scala,如何在Scala对象中实现getDataStore方法作为单例方法(threadsafe),或者Scala的对象将自动实现此方法作为单例方法 object MorphiaHelper { var morphia = new Morphia() var datastore = null def getDataStore() = {morphia.createDatastore(new Mongo(mongoip, mongoport), "test") } } 我不完全确定您所说

如何在Scala对象中实现getDataStore方法作为单例方法(threadsafe),或者Scala的对象将自动实现此方法作为单例方法

object MorphiaHelper {
  var morphia = new Morphia()
  var datastore = null
  def getDataStore() = {morphia.createDatastore(new Mongo(mongoip, mongoport), "test")
  }
}

我不完全确定您所说的单例方法(threadsafe)是什么意思,所以这里有一些您可能关心的变体/事实:

  • MorphiaHelper是一个单例,因为您将其设置为对象。这里没什么可做的

  • getDataStore()方法不是线程安全的。要使其线程安全,请参见以下问题:

  • 如果要确保只有一个使用getDataStore的返回值初始化的datastore实例,可以像这样重写对象:

    object MorphiaHelper {
      lazy val datastore = (new Morphia()).createDatastore(
          new Mongo(mongoip, mongoport), "test")
    }
    
    这将只创建一个数据存储并将其保存


  • 我不完全确定您所说的单例方法(threadsafe)是什么意思,所以这里有一些您可能关心的变体/事实:

  • MorphiaHelper是一个单例,因为您将其设置为对象。这里没什么可做的

  • getDataStore()方法不是线程安全的。要使其线程安全,请参见以下问题:

  • 如果要确保只有一个使用getDataStore的返回值初始化的datastore实例,可以像这样重写对象:

    object MorphiaHelper {
      lazy val datastore = (new Morphia()).createDatastore(
          new Mongo(mongoip, mongoport), "test")
    }
    
    这将只创建一个数据存储并将其保存


  • 使其
    lazy val
    ,以便在requested@DenisTulskiy哎呀,这正是我的本意。修复了它。使它成为
    lazy val
    ,以便在requested@DenisTulskiy哎呀,这正是我的本意。修好了。