Drools中的java类型不安全对象字段访问
我正在使用一个系统,其中一些插入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字段等等
有没有办法做到这一点,可能是某种类型的类型转换或绕过类型检查
(注意:不幸的是,现在还不能选择将模型更改为键入,而不是将所有内容推入对象。)
# 1 楼答案
从Drools 5.5.0开始,您可以“投射”事实的属性。请阅读本文件第4.1.1.2节:http://docs.jboss.org/drools/release/5.5.0.Final/droolsjbpm-introduction-docs/html_single/
基本上,您需要做的是:
免责声明:我以前从未尝试过强>
# 2 楼答案
您也可以在类型声明中使用@typesafe(false),但如另一个答案中所示的强制转换要好得多