首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在drools规则引擎drl文件中工作的实例

无法在drools规则引擎drl文件中工作的实例
EN

Stack Overflow用户
提问于 2019-12-17 19:05:27
回答 1查看 165关注 0票数 0

我将一个列表List<ArrayList> list = new ArrayList<>();传递给drools,内部的arraylist包含TaxPayer类的对象,我的规则如下

代码语言:javascript
复制
rule "test1"
when
    $l:TaxList($k : list)
    $b:ArrayList() from $k
    $a:Object() from $b
then
    if($a instanceof TaxPayer){
        $b.add(new TaxPayer(7,6,5,4,3,2,1));
    }
    if($a instanceof Object){
        $b.add(new TaxPayer(1,2,3,4,5,6,7));
    }

end

第二个if运行得很好,但是即使它是TaxPayer的一个实例,它也不会出现在第一个if中

EN

回答 1

Stack Overflow用户

发布于 2019-12-18 14:23:56

我尝试以如下方式执行上述规则:

代码语言:javascript
复制
rule "test"
when
    $c : TaxList($list : list)
    $b : ArrayList()  from $list
    $testobj: Object() from $b
then
    if ($testobj instanceof TaxPayer){
        System.out.println("inside if 1");
    }
    if ($testobj instanceof Object) {
        System.out.println("inside if 2 ");
    }
end

它对我来说运行得很好。我得到的输出是:

代码语言:javascript
复制
inside if 1
inside if 2 
inside if 1
inside if 2 ...

您能否详细说明您的问题,并在问题中添加相应的java代码,以便我能够理解如何将对象插入到drools会话中。请添加Java代码片段和TaxList类。

编辑:

Main.java:

代码语言:javascript
复制
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieContainer = kieServices.newKieClasspathContainer();
        KieSession kieSession = kieContainer.newKieSession("test");
        ArrayList<TaxPayer> taxPayers = new ArrayList<>();
        taxPayers.add(new TaxPayer(1));
        taxPayers.add(new TaxPayer(2));
        ArrayList<ArrayList> arrayLists = new ArrayList<>();
        arrayLists.add(taxPayers);
        TaxList taxList = new TaxList(arrayLists);
        kieSession.insert(taxList);
        kieSession.fireAllRules();
    }
}

TaxList.java:

代码语言:javascript
复制
import java.util.ArrayList;

public class TaxList {
    ArrayList<ArrayList> list = new ArrayList<>();


    public TaxList(ArrayList<ArrayList> list) {
        this.list = list;
    }

    public ArrayList<ArrayList> getList() {
        return list;
    }

    public void setList(ArrayList<ArrayList> list) {
        this.list = list;
    }
}

TaxPayer.java:

代码语言:javascript
复制
public class TaxPayer {
    private int id;

    public TaxPayer(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59372913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档