Pregunta

¿Cuál es Scala equivalente de bloque estático de Java?

¿Fue útil?

Solución

Código en el constructor (es decir, el cuerpo) del objeto compañero es no precisamente el mismo que el código de forma estática initialiser de bloques de una clase Java. En el siguiente ejemplo, se crea una instancia de A, pero la inicialización no se produce.

scala> object Test { class A; object A { println("A.init") }}        
defined module Test

scala> new Test.A
res3: Test.A = Test$A@3b48a8e6

scala> Test.A
A.init
res4: Test.A.type = Test$A$@6e453dd5

Para la construcción de disparo del objeto acompañante cuando se crea la primera instancia de la clase, se podría acceder a él desde el constructor de la clase.

scala> object Test { class A { A }; object A { println("A.init") }}
defined module Test

scala> new Test.A                                                  
A.init
res5: Test.A = Test$A@4e94a28e

scala> new Test.A
res6: Test.A = Test$A@30227d4e

En muchas circunstancias, la diferencia no importaría. Pero si usted está lanzando misiles (u otros efectos secundarios), es posible que cuidar!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top