Java 在Drools中输入不安全的对象字段访问

Java 在Drools中输入不安全的对象字段访问,java,drools,Java,Drools,我正在使用一个系统,其中一些插入Drools引擎的数据遵循以下格式(严重过于简化): 这些值可以是几种不同的类型。现在,我想创建一系列Drools规则来检查各个字段的值,大致如下: $a : Item(valueType == "Car", value.owner.location == "At Home") $b : Item(valueType == "Payments", value.rates.discounts.percent == 1337) $c : Item(valueType

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

这些值可以是几种不同的类型。现在,我想创建一系列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字段等等

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


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

从Drools 5.5.0开始,您可以“强制”事实的属性。请阅读本文件第4.1.1.2节:

基本上,您需要做的是:

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

免责声明:我以前从未尝试过这种方法。

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

非常感谢。我会调查的。
$a : Item(valueType == "Car", value#Car.owner.location == "At Home")