从drl文件调用非静态方法?

时间:2014-06-02 08:21:49

标签: drools optaplanner drools-planner

使用optapllaner,是否可以在得分计算drl文件中调用“Graph.getInstance()。mdm()”方法?

我在某处读到了我只能调用静态方法,但我不确定。

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。当然,为了在分数计算期间调用方法有任何意义,它需要有一个接受实体或变量依赖属性的参数。

接受实体:

when
    $p : Process()
    eval(Graph.getInstance().mdmForProcess($p) == true)
then

接受依赖于变量的属性:

when
    Process($c : computer)
    eval(Graph.getInstance().mdmForComputer($c) == true)
then

总的来说,我不喜欢这种设计,我更喜欢这样的设计:

when
    Process(mdmIsGood() == true)
then


@PlanningEntity class Process {

     public boolean mdmIsGood() {
         return Graph.getInstance().mdmForProcess($p);
     }

     ...
}

注意:如果方法不是基于实体或依赖于变量的属性,为什么没有意义呢?因为你可以预先计算它!因此,在每次得分计算中计算它都是非常低效的。请参阅文档部分"缓存的问题事实"。