You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:24:19