2

我正在使用一个系统,其中插入 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 在加载规则时静态类型检查规则,不允许这种使用,因为不能保证拥有所有者/费率/学生字段等等。

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

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

4

2 回答 2

6

从 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")

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

于 2013-02-13T13:02:41.587 回答
2

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

于 2013-02-13T21:10:33.457 回答