2016-04-05 9 views
1

Was ist der Unterschied zwischen:initialisieren Objekt in @Shared oder setupSpec()

@Shared 
MyObject myObject = new MyObject() 

und

MyObject myObject 

def setupSpec() { 
    myObject = new MyObjec() 
} 

Warum soll ich die @Shared Anmerkung im zweiten Beispiel verwenden? Beide werden nur einmal erschaffen, oder?

Antwort

3

Wahrscheinlich in Ihrem zweiten Beispiel bekam man diesen Fehler:

Error:(22, 9) Groovyc: Only @Shared and static fields may be accessed from here

So können Sie eine dieser Optionen wählen:

  1. Verwendung @Shared Annotation und init Feld in einer Zeile

    @Shared 
    MyObject myObject = new MyObject() 
    
  2. Verwenden Sie static und init Feld in einer Zeile

    static MyObject myObject = new MyObject() 
    
  3. Verwendung @Shared Annotation und init Feld innerhalb setupSpec Methode

    @Shared 
    MyObject myObject 
    
    def setupSpec() { 
        myObject = new MyObjec() 
    } 
    
  4. Verwendung static und init Feld innerhalb setupSpec Methode

    static MyObject myObject 
    
    def setupSpec() { 
        myObject = new MyObjec() 
    } 
    
+0

Aber muss ich @Shared verwenden im zweiten Beispiel, wenn ich eine Membervariable referenziere in der setupSpec()? – GarfieldKlon

+0

@GarfieldKlon Ich habe meine Antwort bearbeitet. Ich hoffe jetzt ist es sauberer. –