0

在我的 java pojo XOM 模型中,我有一个静态变量说 count。我正在执行 5 条规则,它将 count 变量增加一。所以在执行结束时,我的值为 count = 5 。

现在,如果我声明一个非静态变量计数并为每个规则执行增加其值,该变量将被初始化 5 次并且它是非静态的。

换句话说,如果对象未声明为 static ,将创建我的 java XOM 模型类的 5 个实例吗?

4

2 回答 2

0

静态变量仅仅是类变量。因此,它将在规则调用中“持续存在”。换句话说,下次你运行它时,计数将是 10。如果你不使用静态,那么它将为每个规则调用初始化一次,而不是为每个规则初始化一次。所以,简而言之,不。

于 2012-04-06T01:52:24.773 回答
0

不确定我是否理解你的问题。
我有一条规则说明:
“然后将 myObj.count 设置为 myObj.count + 1;” 那么您将拥有与 myObj 对象一样多的计数变量。
因此,如果您在工作内存中插入一个 myObj,那么在最后和执行期间您将只有一个 myObj。
每个规则将触发与您在工作记忆中“匹配”的次数一样多的时间。
因此,如果您在引擎中传递 5 个 myObj,您将拥有 5 个 myObj.count,每个最终值为“5”。

如果您使用的是静态,那么它将是相同的。
除非您在有状态模式下使用引擎(实际上很少见)。
BRMS 有一个决策服务,因此对传入的参数(当然还有规则)做出决定。
我并不是说您不能在有状态模式下使用它,但这种用法很少见。
如果你这样做,那么是的,前面的答案是正确的,你最终会得到一个无限增加的值。每次运行增加五个。

顺便说一句:我从未尝试过这个,因为有一整套属性可以获取触发或不触发的规则数量以及执行时间等等......

总而言之,你在工作记忆中拥有你所拥有的东西。这意味着如果您有一个对象实例,引擎将永远不会在运行时创建更多实例。由于 RETEPlus 算法,这将导致疯狂( : : )。(也不是经常使用)
创建更多对象实例的唯一方法是直接通过规则自己完成。例如:在报告的消息中添加消息“hello world”。
希望对您有所帮助

于 2012-04-18T12:15:36.360 回答