编写代码,发现get操作无法从具有枚举键的map中获取值。
例如,checkers
初始化后,get
操作总是返回 null。为什么
class Test {
static void main(String[] args){
Map<CHANA_OPERATION, Closure> checkers = [VIDEO_GENERATION: (userId) -> {
System.out.println("..............")
}, 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
}
}
}
Exception in thread "main" java.lang.NullPointerException: Cannot invoke method call() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:110)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:44)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:34)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
at com.chana.application.service.impl.Test.main(Test.groovy:11)
您实际上并没有在这里使用枚举。Groovy 中的映射文字使用字符串键,并且引号是可选的(如果键可以解析为一个标记)。
要为键使用正确的值,您必须将值放在括号内。您还必须引用枚举类。
例如
你的地图有字符串作为键。很容易检查
有两种方法可以修复此问题: