Groovy中如何定义全局静态常量并在静态方法中访问
问题根因
你的代码运行无输出和静态常量的定义语法无关,是踩了Groovy脚本的入口机制坑:
- 运行无显式class包裹的松散Groovy脚本时,Groovy会自动把所有代码包装为
groovy.lang.Script的子类,默认执行该子类的run()方法,不会主动调用你自定义的static void main(String[] args)方法。你写的main方法从头到尾没被触发,自然没有任何输出。
正确实现方式
根据编码习惯二选一即可:
方式1:显式声明类(和Java写法完全兼容)
如果习惯Java式的类结构+main方法入口,直接显式定义类,静态常量的写法和Java完全一致,不需要额外加@Field注解:
class ConstDemo { final static String VARIABLE = 'Variable' static void main(String[] args) { println VARIABLE } }
直接运行该类,会正常输出Variable。
方式2:松散脚本结构写法
如果不想显式写类包裹代码,就用Groovy原生的脚本写法:用@Field注解修饰常量把它升级为脚本类的静态成员,自定义静态方法直接访问常量即可,不要自己写main方法当入口,脚本顶层的代码会被自动按顺序执行:
import groovy.transform.Field @Field final static String VARIABLE = 'Variable' static void printConstant() { println VARIABLE } // 直接在脚本顶层调用静态方法,这部分代码会被塞进默认的run()入口执行 printConstant()
运行后同样可以正常输出Variable。
注意事项
@Field注解的作用是把脚本内定义的变量从run()方法的局部变量,升级为脚本类的成员变量,搭配static final修饰就是标准的类级静态常量,静态方法内可以直接访问,这部分语法本身没有错误。- 松散脚本模式下不要自己定义main方法指望它自动执行,这是原代码失效的唯一原因。
内容的提问来源于stack exchange,提问作者BeastMaster64
相关产品推荐
相关产品推荐

