在流口水的 LHS 上使用辅助方法

Using helper methods on LHS in drools

我正在学习流口水并试图了解最佳实践。 两者之间有什么实际区别吗:

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

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

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

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

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

如果你概括我的问题,那么它听起来像:"Is it safe to call helpers that return boolean values in when clause?"(例如,如果我使用 Objects.equals(a, b) 而不是写 a == b)

Drools(在 6.x 中)计算布尔表达式。简单比较运算符和实现相同运算符的方法之间是否存在 "practical difference":两者的计算结果相同,简单运算符避免了调用开销。

你所说的"caching"是Drools尽可能组合相同约束的结果,但不能保证所有这些表达式都可以缓存所有时间.

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