ВКогда построены одноэлементные объекты?
object O {
// construction code and member initialization
}
конструкции, когда собирается запустить этот код?
ВКогда построены одноэлементные объекты?
object O {
// construction code and member initialization
}
конструкции, когда собирается запустить этот код?
Код будет вызван, когда O
будет доступен в первый раз (некоторый метод или какое-либо свойство). Например, следующая программа
object O {
println("Hello from O")
def doSome() {}
}
object App extends Application {
println("Before O")
O.doSome()
println("After O")
}
даст
Before O
Hello From O
After O
Это не достаточно просто определить O
. Также не будет работать, чтобы вызвать Class.forName("O")
, так как имя скомпилированного объекта равно O$
, поэтому вызовите Class.forName("O$")
.
В интересах построения самообеспеченности:
scala> object O { println("hi") }
defined module O
scala> O
hi
res0: O.type = [email protected]
scala> O
res1: O.type = [email protected]
Относно 'Class.forName («O»)', что только не будет работать, так как имя класса для объекта 'O' на самом деле'» O $ "'. Если вы вызываете 'java.lang.Class.forName (" O $ ")', он действительно выполнит блок инициализации. –
Спасибо, я исправил это. –
Очень хорошо. Это то, на что я надеялся. –