将参数传递给Scala对象

时间:2014-03-17 14:40:48

标签: scala

是否可以从外部对象初始化Scala对象?我尝试初始化的Scala对象没有任何Companion类。这是一个例子:

object ObjectA {
  val mongoDBConnectionURI = // This is the Val that I want to initialize from an external object
  ....
  ....
}

但MongoDBConnectionURI类型的mongoDBConnectionURI需要一个主机和一个端口,我必须从配置文件中读取,实际上由对象B完成,这些值传递给ObjA。稍后我的所有DAO对象都将访问对象A中的mongoDBConnectionURI变量以获取连接字符串。我怎样才能将对象B中的值传递给对象A并将对象A中的val初始化?

1 个答案:

答案 0 :(得分:5)

简单的解决方案:

object ObjectA {
  lazy val mongoDBConnectionURI = getConnection(name.get, passwd.get)
  var name: Option[String] = None
  var passwd: Option[String] = None
}

如果您在"传递"之后使用mongoDBConnectionURI名称和密码 - 一切都应该正常工作。但我建议使用class而不是object并将其传递给DAO classess(也没有循环引用):

==moduleA==

class UserDAO(objectA: ObjectA) 

==moduleB==

object ObjectB {
  val user = ...
  val passwd = ...
  val a = new ObjectA(name, passwd)
  object UserDAOInstance extends UserDAO(a)

}
相关问题