QlExpress是什么
轻量级java语法的规则引擎。特性:线程安全、效率高、依赖少
跑个栗子看看
public class QlExpressDemo {
public static void main(String[] args) throws Exception{
String express ="1 加 1";
ExpressRunner runner = new ExpressRunner();
runner.addOperatorWithAlias("加","+",null);
Object result = runner.execute(express, null, null, true, true);
System.out.println(result);
}
}
输入: 1 加 1 输出: 2
基本语法
ExpressRunner :语法分析和计算的入口类
核心方法:
/**
* 执行一段文本
* @param expressString 程序文本
* @param context 执行上下文
* @param errorList 输出的错误信息List
* @param isCache 是否使用Cache中的指令集
* @param isTrace 是否输出详细的执行指令信息
* @return
* @throws Exception
*/
public Object execute(String expressString, IExpressContext<String,Object> context,
List<String> errorList, boolean isCache, boolean isTrace) throws Exception {
return this.execute(expressString, context, errorList, isCache, isTrace, null);
}
expressString:程序文本 支持普通java语法和java操作包括自定function,比如:"if(0>1){return true;} return false;" 一段简单的java程序
1、支持 +,-,*,/,<,>,<=,>=,==,!=,<>【等同于!=】,%,mod【取模等同于%】,++,--,
2、in【类似sql】,like【sql语法】,&&,||,!,等操作符
3、支持for,break、continue、if then else 等标准的程序控制逻辑
4、支持java对象操作
5、支持自定义function, 例如:"function add(int a,int b){ return a+b; }; return add(1,4);"
6、不支持try-catch、java8的lambda、for循环集合操作、弱类型语言,请不要定义类型声明,
更不要用Templete(Map<String,List>之类的)、array的声明不一样、min,max,round,print,println,like,
in 都是系统默认函数的关键字,请不要作为变量名
context:执行上下文可以扩展为包含ApplicationContext
网友评论