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

Drools中使用Map存储Set时,LHS声明Set类型变量导致规则RHS不执行的问题求助

Drools中使用Map存储Set时,LHS声明Set类型变量导致规则RHS不执行的问题求助

大家好,我碰到一个Drools的问题,想请各位帮忙分析下:

我在Drools里用一个全局Map来存储用于校验的查找值,这个Map的Java定义是:

Map<String,Set<String>>

我把它作为全局变量传给了规则引擎,然后写了这样的规则(只保留核心部分):

import java.util.Set;
global java.util.Map lookupValues;
dialect "java"
rule "rule"
agenda-group "SYSTEM"
when
$lookup : Set() from lookupValues["KEY"]
// 另一种写法尝试
//$lookup : Set() from lookupValues.get("KEY")

then
System.out.println("fail")
end

我本来想把$lookup当成Set来用,后面好通过contains去校验其他值,但只要把它声明成Set类型,规则的RHS部分就完全不会执行。

后来我换了一种方式访问这个lookupValues:

import java.util.*;
global java.util.Map lookupValues;
dialect "java"
rule "rule"
agenda-group "SYSTEM"
when
$rawLookup : Object() from lookupValues.get("KEY")
then
   Set values = (Set)lookupValues.get("KEY");
   System.out.println("Value: " + values+", "+values.getClass());
end

这样就能正常打印出:

Value: [id3, id2, id1], class java.util.HashSet

结果完全符合我的预期。所以我怀疑是变量声明或者全局变量的定义哪里出问题了,有没有大佬知道原因呀?提前谢谢大家了!

备注:内容来源于stack exchange,提问作者Arti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:44:29