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
相关产品推荐
相关产品推荐

