我在.drl规则文件中使用arrayList。 在一个规则中,我检查列表是否为空并设置setFocus(第二规则)。 在第二个规则我从列表中获取元素,在此规则中我得到列表是空错误。
我想检查列表是否为空,并在一个规则中从该arraylist获取特定元素。
rule "Rule chesks client had already received Notifications or Not"
salience 10
no-loop true
when
event : Event($listOfClientNotifications : clientNotifications)
eval($listOfClientNotifications < 1)
then
event.setMessage("list is null");
end
第二条规则:
rule "Rule chesks "
salience 05
no-loop true
when
event : Event($listOfClientNotifications : clientNotifications)
value : ClientNotifications() from $listOfClientNotifications; // <<< !!!
then
event.setMessage("Value "+**value.getMessage()**);
end
此<<< !!!
是发生空错误的地方。
答案 0 :(得分:0)
在一个规则中针对null测试列表(正确!)不会避免在另一个规则中运行到NPE。规则评估不,重复不,与规则执行,显着性和激活组同步。
这是一个正确的检查:
rule "check list is null"
when
event : Event(clientNotifications == null)
then
event.setMessage("list is null");
end
防止遇到NPE
rule "use notifications from list"
when
event : Event($listOfClientNotifications : clientNotifications != null)
value : ClientNotifications() from $listOfClientNotifications;
then
event.setMessage("Value "+ value.getMessage()); // strange, but maybe?
end