java 从文件.drl中的drool函数访问全局变量

tv6aics1  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(127)

当我试图从drool函数访问全局变量时,我得到了一个异常:

抛出异常;嵌套异常是java.lang。运行时异常:无法获取KieModule,存在错误:错误信息:消息[id=1,kieBase=defaultKieBase,level=ERROR,path=insuranceperiod.drl,line= -1,column=0 text=导入时出错:'KieRule.AddString.addString']消息[id=2,kieBase=defaultKieBase,level=ERROR,path=insuranceperiod.drl,line=15,column=0 text=[ function addStringaddString(line:15):无法解析stringList]]
代码如下:

*Java代码

List<String> stringList = new ArrayList<>();
droolSession.setGlobal("stringList",stringList)
droolSession.fireAllRules();

*drl编码

global java.util.List stringList;

function void addString(String s){
    stringList.add(s);
}

尝试访问drool函数内部的全局变量

voase2hg

voase2hg1#

不能从DRL函数体访问DRL全局。
理由如下:DRL函数等效于Java static方法。DRL全局可以被认为类似于示例字段(正如您在代码片段中看到的,您在Session示例上设置全局值,而不是KBase)。与Java类似,您不能从静态方法访问示例字段。
如果你试图在Java中将static void addString(String s) {...}定义为一个静态方法,然后从RHS中使用它,你会遇到类似的问题:静态方法的定义对stringList示例没有作用域访问权限。
您总是可以重构代码以符合范围可见性,并以不同的方式满足您的需求。

相关问题