2010-02-27 11 views

Antwort

31

Code im Konstruktor (dh der Körper) des Companion-Objekts ist nicht genau das gleiche wie Code in einem statischen Initialisierungsblock einer Java-Klasse. Im folgenden Beispiel erstelle ich eine Instanz von A, aber die Initialisierung findet nicht statt.

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] 

Zum Aufbau des Begleitobjekt ausgelöst, wenn die erste Instanz der Klasse erstellt wird, können Sie es aus der Klasse Konstruktor zugreifen konnte.

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] 

In vielen Fällen würde der Unterschied keine Rolle spielen. Aber wenn Sie Raketen (oder andere Nebenwirkungen) starten, könnten Sie sich interessieren!

Verwandte Themen