在 @Shared 或 setupSpec() 中初始化对象

Initialize object in @Shared or setupSpec()

有什么区别:

@Shared
MyObject myObject = new MyObject()

MyObject myObject

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

为什么要在第二个例子中使用@Shared 注解?两者都只创建一次,不是吗?

在你的第二个例子中,你可能遇到了这个错误:

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

因此您可以选择以下选项之一:

  1. 在一行中使用 @Shared 注释和初始化字段

     @Shared
     MyObject myObject = new MyObject()
    
  2. 在一行中使用static和初始化字段

     static MyObject myObject = new MyObject()
    
  3. setupSpec 方法中使用 @Shared 注释和初始化字段

     @Shared
     MyObject myObject
    
     def setupSpec() {
         myObject = new MyObject()
     }
    
  4. setupSpec 方法中使用 static 和初始化字段

     static MyObject myObject
    
     def setupSpec() {
         myObject = new MyObject()
     }