【问题标题】:Type-unsafe Object field access in DroolsDrools 中类型不安全的对象字段访问
【发布时间】:2013-02-13 12:12:26
【问题描述】:

我正在使用一个系统,其中插入 Drools 引擎的一些数据遵循以下(严重过度简化)格式:

public class Item {
    public String getValueType() { ... }
    public Object getValue() { ... }
}

这些值可能是几种不同的类型。现在,我想创建一堆 Drools 规则来检查值的各个字段,类似于:

$a : Item(valueType == "Car", value.owner.location == "At Home")
$b : Item(valueType == "Payments", value.rates.discounts.percent == 1337)
$c : Item(valueType == "Royalty", value.student.occupation == "Librarian")

...等等。现在,我面临的问题是 Drools 在加载规则时静态类型检查规则,不允许这种使用,因为不能保证拥有 owner/rates/student 字段等等。

有没有办法做到这一点,可能是某种类型转换或绕过类型检查?

(注意:不幸的是,目前还不能选择更改要键入的模型,而不是将所有内容都放入对象中。)

【问题讨论】:

    标签: java drools


    【解决方案1】:

    从 Drools 5.5.0 开始,您可以“投射”事实的属性。请阅读本文档第 4.1.1.2 节:http://docs.jboss.org/drools/release/5.5.0.Final/droolsjbpm-introduction-docs/html_single/

    基本上,你需要做的是:

    $a : Item(valueType == "Car", value#Car.owner.location == "At Home")
    

    免责声明:我以前从未尝试过。

    【讨论】:

    • 非常感谢。我会调查的。
    【解决方案2】:

    您也可以在类型声明中使用 @typesafe(false),但如另一个答案所示的强制转换要好得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2019-04-25
      • 2020-04-28
      • 1970-01-01
      相关资源
      最近更新 更多