当前位置: 首页 > 知识库问答 >
问题:

无法在then子句中访问Drools变量

阎啸
2023-03-14

我有一个对象类,其中有几个字段和方法,我可以在when子句中成功访问这些字段和方法:

public final class ObjectWrapper {

   private Object object;
   private Date approvalDate;
   
   public getObject() {
       return object;
   }
   
   <remaining getters and setters>

}

这类似于我的口水规则的结构:

rule "IS_ELIGIBLE"
when
    ObjectWrapper(
                  $object : getObject(),
                  <remaining conditions>
                 )
then
    System.out.println($object);
end

IntelliJ立即抱怨说它无法解析符号$对象。仅当我执行以下操作时,该变量似乎才可访问,但无法从包装器上下文外部访问getObject()方法。

rule "IS_ELIGIBLE"
when
    $object : getObject(),
    ObjectWrapper(
                  <remaining conditions>
                 )
then
    System.out.println($object);
end

在使用drools框架时,处理变量的正确方法是什么?是否可以在包装器外部声明变量,然后在包装器内部更改其值?

上面代码工作的项目中还有其他drools文件,但对于那个,如果变量是在包装类之外声明的,则只能在this子句中访问它。

共有1个答案

彭允晨
2023-03-14

IntelliJ的代码格式很好,但也有一些已知的bug,出版商对修复它并不特别感兴趣。仅仅因为代码格式化程序说它是错误的,并不意味着它实际上是错误的(尽管它通常是正确的)对它的建议持怀疑态度。

根据您所展示的内容,您的规则的正确语法应该是这样的:

rule "IS_ELIGIBLE"
when
    ObjectWrapper( $object: object,
                  <remaining conditions>
                 )
then
    System.out.println($object);
end

当您有类似于ObjectWrapper($o:object)的东西时,Drools将首先查找名为object的公共变量,然后查找名为getObject的方法(基本上遵循bean命名约定)通常,调用方法的唯一时间是针对不符合命名约定的对象。。。例如,如果您有一个doFoo(),它返回一个您想要分配结果的布尔值。

 类似资料:
  • 问题内容: 我正在开发Spotify应用。我可以登录并获取我的令牌。我的问题是我无法在方法外访问变量。在这种情况下 这是我的方法: 如您所见,我在console.log中记录了名称,并在控制台中获得了正确的值。但是仅在我调用即使返回names变量的情况下得到的函数的情况下,它也可以在这里使用。 我需要那个变量。 问题答案: 没有返回任何东西。你需要从返回的承诺,然后当你回到内 即 它是由外部函数返

  • 问题内容: 我有服务 即使在控制器中也可访问 有人可以解释一下为什么在angular.foreach中无法访问“ this.list”吗?如何访问“ this.list”? 问题答案: (请参阅http://docs.angularjs.org/api/angular.forEach)函数中的最后一个参数是的上下文。因此,您需要这样的东西:

  • 问题内容: 我正在尝试在cgo中访问ac struct,但是要这样做 无法确定C.utmpx的名称种类 utmpx是结构 这是执行代码: 在utmpx.h文件中,有 我可以使用_PATH_UTMPX,但在使用UTMPX_FILE时也会收到相同的警告,为什么? 看来我无法访问在.h文件中声明的这些变量,该怎么办? 平台:macOS sirria,go 1.8 问题答案: 我必须定义_GNU_SOUR

  • 本文向大家介绍Java中无法访问的语句错误,包括了Java中无法访问的语句错误的使用技巧和注意事项,需要的朋友参考一下 由于多种原因导致无法编译代码时,发生无法访问的代码错误,其中包括:无限循环,无法访问的代码行之前的return语句。 让我们看一个例子- 示例 输出结果 名为Demo的类包含主函数,并定义了一个值,并检查该值并运行空的“ for”循环。如果找到该值,则控件会跳出循环,否则将显示一

  • 问题内容: 我知道我可能需要进行分组才能完成此任务,但我不太了解。PostgreSQL 8.1 我需要将结果集限制为“原始> 2017-01-01”。原始设置在第11行中。它在Excel中作为一列返回,是一个日期。 目前,它返回的结果可以追溯到几年前的数据,而我们并不需要它。 更新:我已将选择内容更改为这样,它似乎正在工作-是否对这样做是否正确有任何想法?它只会一直盯着过去的180天。 问题答案:

  • 场景如下: 我有一个java pojo类,具有2个变量和以及适当的getter和setter。我正在使用决策表流,我想要: 条件:当类型设置为“1”时 操作:调用name类的setName setter,并从excel中设置适当的参数 现在,我想在java中访问name的这个集值。 这就是我所做的: Name.java- MainClass.java-这有口水实现!! 决策表e:: http://