gpt4 book ai didi

java - 我怎样才能在 drools 中获得动态属性

转载 作者:行者123 更新时间:2023-11-29 09:15:26 25 4
gpt4 key购买 nike

我有一个 XML 文件,其中包含元数据,例如字段的最大长度。我必须使用 drools 来构建规则,以根据事实列表验证此元数据。我不想对可能在 XML 中指定或不指定的每个字段的名称进行硬编码。

我试着这样做:

when
$metadata: Metadata(maxLength != null);
$obj: Object(eval($metadata.getFieldName()).length > $metadata.maxLength);
then
// TODO
end

它不起作用,我收到以下错误:

java.lang.IllegalStateException: Errors while building rules : Unable
to Analyse Expression $metadata.getFieldName() > $metadata.maxLength:
[Error: Comparison operation requires compatible types. Found class
java.lang.String and class java.lang.Integer] [Near : {...
$metadata.getFieldName() > $metadata.maxLength ....}]

是否可以动态获取字段名并比较其最大长度?我是否必须创建一个 java 对象才能完成此操作?

谢谢

最佳答案

您谈到了 XML 和元数据。你能区分所有实体吗?比如订单,能不能提取出每个订单,以及每个订单的属性?

我通过使用 map 来存储每个属性解决了类似的问题。

public class Order{
private int id;
private Map<String, Integer> num_attribute_map = new HashMap<String, Integer>();
public Map getNumAttributeMap(){
return this.num_attribute_map;
}

如果订单的customer_satisfaction = 5,

order_obj.getNumAttributeMap().put("customer_satisfaction" , 5);

因此您创建了 Order,它们的属性存储在 numAttributeMap 中。


用于在 Order 上实现规则

$ord : Order(
getNumAttributeMap[$attribute] >= $value
)

当然,$attribute 就是 "customer_satisfaction"[] 符号用于访问列表的元素,给定索引或映射的值,给定键。


希望您“了解” map 的概念。此外,请查看 Drools 语言对列表和 map 访问的支持。

除了执行比较操作的整数映射之外,我还实现了字符串列表映射以执行“在”操作。请引用https://stackoverflow.com/a/9241089/604511也是

关于java - 我怎样才能在 drools 中获得动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com