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

Drools提取嵌套Map内值赋值时出现strict-mode无法解析方法错误如何解决

问题原因及解决方案

你的报错由两个核心问题导致:

  1. 变量名不匹配:when分支中提取内层Map绑定的变量是$male,但then分支使用了未定义的$innerMap、$map变量,首先需要统一变量命名。
  2. 类型信息丢失: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:15:04