2010-02-27 4 views

Répondre

31

Le code dans le constructeur (c'est-à-dire le corps) de l'objet compagnon est et non exactement le même que le code dans un bloc initialiseur statique d'une classe Java. Dans l'exemple ci-dessous, je crée une instance de A, mais l'initialisation ne se produit pas.

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

scala> new Test.A 
res3: Test.A = [email protected] 

scala> Test.A 
A.init 
res4: Test.A.type = [email protected] 

Pour déclencher la construction de l'objet compagnon lorsque la première instance de la classe est créée, vous pouvez y accéder à partir du constructeur de la classe.

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

scala> new Test.A             
A.init 
res5: Test.A = [email protected] 

scala> new Test.A 
res6: Test.A = [email protected] 

Dans de nombreux cas, la différence n'aurait aucune importance. Mais si vous lancez des missiles (ou d'autres effets secondaires), vous pourriez vous en soucier!

Questions connexes