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

Groovy枚举键Map的get操作返回null问题排查(附代码示例)

Groovy枚举作为Map键get返回null引发NPE的原因及解决办法

问题原因

你初始化Map时踩了Groovy语法的常见坑:Map字面量里的VIDEO_GENERATION被默认解析成字符串字面量,而非CHANA_OPERATION枚举的实例。这导致checkers Map实际存储的键类型是String,和你声明的Map<CHANA_OPERATION, Closure>类型不匹配。当你用CHANA_OPERATION.VIDEO_GENERATION枚举实例调用get()方法时,找不到对应字符串键的条目,自然返回null,最终触发NullPointerException。

解决方案

修改Map初始化代码,用括号包裹枚举实例,明确告诉Groovy这是Map的键(而非字符串):

class Test {
    static void main(String[] args){
        Map<CHANA_OPERATION, Closure> checkers = [
            (CHANA_OPERATION.VIDEO_GENERATION): (userId) -> {
                System.out.println("..............")
            }, 
            (CHANA_OPERATION.TEXT_API_CALL): (userId)->{
                return false
            }
        ]

        checkers.get(CHANA_OPERATION.VIDEO_GENERATION).call(1)
    }

    enum CHANA_OPERATION{
        VIDEO_GENERATION(0),
        TEXT_API_CALL(1),
        TEXT_VIDEO_API_CALL(2)

        int code
        CHANA_OPERATION(int code){
            this.code = code
        }
    }
}

补充说明

Groovy的Map字面量语法规则:如果键是不带引号的标识符,默认会被处理为字符串;只有当键被括号()包裹时,才会被解析为表达式(比如变量、枚举实例、方法调用等)。必须用括号把枚举实例包起来,才能让Map的键类型和声明一致。

内容的提问来源于stack exchange,提问作者shijie xu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:02