Drools入门之function

function函数写法与JavaScript中的函数相似,规则函数是Java类方法的一种变形,它的参数是非必填信息,返回值也是非必填的。一个规则使用函数的好处是可以在同一个地方保持所有的逻辑,同一个逻辑路径下的函数是一个全局的函数。当然规则函数发生变化,则意味着所有调用该函数的规则体都将发生变化。

规则中的函数有两种形式:一种是import,可以引用Java静态方法;另一种需要在规则中添加关键字function。

静态方法

public class RulesFunction {
    public static void main(String[] args) {
        KieServices kieService = KieServices.Factory.get();
        KieContainer kieContainer = kieService.getKieClasspathContainer();
        KieSession kieSession = kieContainer.newKieSession("testFunction");
        kieSession.fireAllRules();
        kieSession.dispose();
    }
}
public class FunctionStatic {
    public static void testStatic1() {
        System.out.println("输出一个无参数无返回值的静态方法");
    }

    public static String testStatic2() {
        System.out.println("输出一个无参数有返回值的静态方法");
        return "Hello";
    }

    public static void testStatic3(String name) {
        System.out.println("输出一个有参数无返回值的静态方法:" + name);
    }

    public static String testStatic4(String name) {
        System.out.println("输出一个有参数有返回值的静态方法:" + name);
        return name;
    }
}
import function com.domain.FunctionStatic.testStatic1;
import function com.domain.FunctionStatic.testStatic2;
import function com.domain.FunctionStatic.testStatic3;
import function com.domain.FunctionStatic.testStatic4;

rule "function"
    when
        eval(true)
    then
    testStatic1();
    System.out.println("函数function02()的返回值"+testStatic2());
    testStatic3("张小三");
    System.out.println("函数function04()的返回值"+testStatic4("李小四"));
end
输出一个无参数无返回值的静态方法
输出一个无参数有返回值的静态方法
函数function02()的返回值Hello
输出一个有参数无返回值的静态方法:张小三
输出一个有参数有返回值的静态方法:李小四
函数function04()的返回值李小四

方法中创建

rule "function2"
    when
        eval(true)
    then
    function1();
    System.out.println("函数function02()的返回值"+function2());
    function3("张小三");
    System.out.println("函数function04()的返回值"+function4("李小四"));
end

function void function1() {
    System.out.println("输出一个无参数无返回值的静态方法");
}

function String function2() {
    System.out.println("输出一个无参数有返回值的静态方法");
    return "Hello";
}

function void function3(String name) {
    System.out.println("输出一个有参数无返回值的静态方法:" + name);
}

function String function4(String name) {
    System.out.println("输出一个有参数有返回值的静态方法:" + name);
    return name;
}

注意:不同逻辑路径下的函数不可使用


Drools入门之function
https://www.zhaojun.inkhttps://www.zhaojun.ink/archives/drools-function
作者
卑微幻想家
发布于
2022-07-01
许可协议