Groovy中Script类是什么?@Field注解作用的技术疑问
关于Groovy @Field注解的作用解释
先明确Groovy脚本的默认编译逻辑:
Groovy脚本会被自动编译成继承自groovy.lang.Script的类,脚本里的代码默认都会被封装到这个类的run方法中。这意味着你直接在脚本里定义的变量,默认是run方法的局部变量,只能在run方法内部使用,脚本里的其他自定义方法根本访问不到这个变量。
而@Field注解的核心作用,就是打破这个限制:
给变量加上@Field注解后,该变量会被提升为脚本类的成员变量(类级别),不再局限于run方法的作用域。这样脚本里的其他自定义方法,就能直接访问这个变量了。
结合你的代码例子来看:
import groovy.transform.Field @Field List awe = [1, 2, 3] def awesum() { awe.sum() } assert awesum() == 6
如果去掉@Field注解,直接写List awe = [1,2,3],调用awesum()时会直接报错——因为awe是run方法的局部变量,awesum()方法根本找不到它。加上@Field后,awe成为类级别的成员变量,awesum()就能正常访问并调用sum()方法,最终断言也能顺利通过。
内容的提问来源于stack exchange,提问作者Rafa S
相关产品推荐
相关产品推荐

