[英]Drools variable cannot be accessed in then clause
我有一个带有几个字段和方法的对象类,我可以在 when 子句中成功访问它们:
public final class ObjectWrapper {
private Object object;
private Date approvalDate;
public getObject() {
return object;
}
<remaining getters and setters>
}
这类似于我的drools规则的结构:
rule "IS_ELIGIBLE"
when
ObjectWrapper(
$object : getObject(),
<remaining conditions>
)
then
System.out.println($object);
end
IntelliJ 立即抱怨告诉我它无法解析符号$object 。 如果我执行以下操作,该变量似乎只能访问,但无法从 Wrapper 上下文外部访问getObject()方法。
rule "IS_ELIGIBLE"
when
$object : getObject(),
ObjectWrapper(
<remaining conditions>
)
then
System.out.println($object);
end
使用drools框架处理变量的正确方法是什么? 是否可以在外部声明变量,然后在包装器内更改其值?
项目中还有其他 drools 文件,上面的代码可以工作,但对于那个,如果变量在包装类之外声明,则只能在then子句中访问。
IntelliJ 的代码格式非常好,但它也有一些已知的错误,出版商对修复它并不是特别感兴趣。 仅仅因为代码格式化程序说它是错误的并不意味着它实际上是(尽管它通常是正确的)。对它的建议持保留态度。
根据您显示的内容,您的规则的正确语法应该是这样的:
rule "IS_ELIGIBLE"
when
ObjectWrapper( $object: object,
<remaining conditions>
)
then
System.out.println($object);
end
当你有ObjectWrapper( $o: object )
类的东西时,Drools 将首先查找一个名为object
的公共变量,然后查找一个名为getObject
的方法(基本上遵循 bean 命名约定。)通常只有一次你会调用方法将用于不符合命名约定的东西......例如,如果你有一个doFoo()
,它返回一个你想要分配结果的布尔值。
如图所示的规则( ObjectWrapper( $object: getObject() )
)也可以正常工作。 代码格式化程序只是混淆了。 我提供的版本在语法上是等效的,并且更像“Drools-like”,但是您所展示的内容并没有错。
尝试这个:
rule "IS_ELIGIBLE"
when
object : ObjectWrapper( object : getObject(),
<remaining conditions>
)
then
System.out.println(object.getObject());
end
ObjectWrapper 的 getObject() 方法也应该有返回类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.