在流氓中使用LHS上的辅助方法

时间:2015-11-19 03:00:36

标签: java drools

我正在学习流口水并试图了解最佳实践。 是否有任何实际区别:

when
    $event : Event(Helper.notNull(foo),...)

并且

when
    $event : Event(foo != null,...)

假设Helper.notNull是java中的一个静态方法,只检查对象是否为空。

我已经在两个相同的规则和一个匹配所有条件的事件上测试了这个,并且只调用了一次helper方法,所以似乎drools能够缓存值。 (我最糟糕的期望是它会为每条规则急切地评估它)

我觉得使用辅助方法和本机drools操作可能会有一些细节。

如果你概括我的问题,那么它听起来像是:“调用在when子句中返回布尔值的助手是否安全?” (例如,如果我使用Objects.equals(a,b)而不是写一个== b)

1 个答案:

答案 0 :(得分:1)

Drools(在6.x中)评估布尔表达式。简单的比较运算符和实现它的方法之间是否存在“实际差异”:两者都将评估相同的结果,而简单的运算符可以避免调用的开销。

你所谓的“缓存”是Drools尽可能地将相同的约束组合在一起的结果,但不能保证所有这些表达式都可以一直缓存。

通过简单的比较,评估相同的写作方法没有任何好处。在必要时,Drools会为equals==致电!=