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

Gar*_*lon 2 shared initialization spock

有什么区别:

@Shared
MyObject myObject = new MyObject()
Run Code Online (Sandbox Code Playgroud)

MyObject myObject

def setupSpec() {
    myObject = new MyObjec()
}
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*wel 5

在您的第二个示例中,您可能收到此错误:

错误:(22, 9) Groovyc:从这里只能访问@Shared 和静态字段

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

  1. @Shared在一行中使用注释和 init 字段

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

     static MyObject myObject = new MyObject()
    
    Run Code Online (Sandbox Code Playgroud)
  3. @SharedsetupSpec方法中使用注解和 init 字段

     @Shared
     MyObject myObject
    
     def setupSpec() {
         myObject = new MyObject()
     }
    
    Run Code Online (Sandbox Code Playgroud)
  4. staticsetupSpec方法中使用和初始化字段

     static MyObject myObject
    
     def setupSpec() {
         myObject = new MyObject()
     }
    
    Run Code Online (Sandbox Code Playgroud)