2011-12-15 2 views
2

В Scala, у меня есть следующий класс:Инициализировать внутренний объект только один раз

class A(param: String) { 
    object B { 
    lazy val db = {new D(param)} 
    } 
} 

, а затем из клиентского кода я должен создать класс А объекты несколько раз, но есть параметр B.db быть инициализирован только один раз. В настоящее время это не работает, так как каждый раз создается новый экземпляр объекта B и создается экземпляр класса A.

Чтобы добавить немного перспективы, объект B.db является экземпляром класса Mongo, который согласно документации должен быть инициализирован только один раз. Как бы вы это сделали?

ответ

8

положить его в объекте компаньона вместо внутреннего объекта

object A { 
    apply(param:String) { 
     new A    
    } 

    lazy val db = {..} 
} 
class A{ 

} 
+0

проклятого ... бить меня к нему на одну минуты ^^ –

+0

Спасибо, это не будет работать, хотя, как это класс пары должны быть доступ к коду инициализации объекта db. По общему признанию, этот вопрос недостаточно ясен. –

+0

вы можете добавить заявку в объект, который принимает параметр. Я отредактирую ответ, чтобы показать, что –