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

Initialization 在@Shared或setupSpec()中初始化对象,initialization,shared,spock,Initialization,Shared,Spock,这两者之间的区别是什么: @Shared MyObject myObject = new MyObject() 及 为什么我要在第二个示例中使用@Shared注释?两者都只创建一次,不是吗?在第二个示例中,您可能会遇到以下错误: 错误:22,9 Groovyc:只能从这里访问@Shared和static字段 因此,您可以选择以下选项之一: 在一行中使用@Shared annotation和init字段 @Shared MyObject myObject = new MyObject()

这两者之间的区别是什么:

@Shared
MyObject myObject = new MyObject()


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

在第二个示例中,您可能会遇到以下错误:

错误:22,9 Groovyc:只能从这里访问@Shared和static字段

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

在一行中使用@Shared annotation和init字段

 @Shared
 MyObject myObject = new MyObject()
 static MyObject myObject = new MyObject()
在一行中使用static和init字段

 @Shared
 MyObject myObject = new MyObject()
 static MyObject myObject = new MyObject()
在setupSpec方法中使用@Shared annotation和init字段

在setupSpec方法中使用static和init字段


但是,如果我引用setupSpec中的成员变量,那么在第二个示例中是否必须使用@Shared?@GarfieldKlon我编辑了我的答案。我希望现在更干净。
 static MyObject myObject

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