Drools提取嵌套Map内值赋值时出现strict-mode无法解析方法错误如何解决
问题原因及解决方案
你的报错由两个核心问题导致:
- 变量名不匹配:
when分支中提取内层Map绑定的变量是$male,但then分支使用了未定义的$innerMap、$map变量,首先需要统一变量命名。 - 类型信息丢失:Drools从外层Map中取值时默认返回
Object类型,无法识别Map类的get()方法,需要明确声明变量的Map类型。
修正后的规则代码
rule "rule#7 testing me 001 " when $pr:Premium($masterMap:valuesMap) // 明确指定内层Map类型,绑定到$innerMap变量 $innerMap: Map<String,String>() from $masterMap["Male"] $rulesResponse:RulesResponse(); then System.out.println("rule#7 map " + $innerMap); // 两种赋值写法均可正常运行 // 写法1:调用get方法+强制类型转换 $rulesResponse.setAbc((String)$innerMap.get("income")); // 写法2:Drools原生Map取值语法,更简洁 // $rulesResponse.setAbc($innerMap["income"]); end
低版本Drools兼容方案
如果你使用的Drools版本较低,不支持在规则内直接写Map泛型,也可以在then分支手动做类型转换解决问题:
rule "rule#7 testing me 001 " when $pr:Premium($masterMap:valuesMap) $male: Object() from $masterMap["Male"] $rulesResponse:RulesResponse(); then Map<String,String> innerMap = (Map<String,String>) $male; $rulesResponse.setAbc(innerMap.get("income")); end
内容的提问来源于stack exchange,提问作者satish marathe
相关产品推荐
相关产品推荐

