是否可以从外部对象初始化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初始化?
答案 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)
}