当前位置: 首页 > news >正文

02、QLExpress从入门到放弃,相关API和文档

QLExpress从入门到放弃,相关API和文档

一、属性开关

public class ExpressRunner {private boolean isTrace;private boolean isShortCircuit;private boolean isPrecise;
}
/*** 是否需要高精度计算*/
private boolean isPrecise = false;高精度计算在会计财务中非常重要,java的float、double、int、long存在很多隐式转换,做四则运算和比较的时候其实存在非常多的安全隐患。
所以类似汇金的系统中,会有很多BigDecimal转换代码。而使用QLExpress,
你只要关注数学公式本身 订单总价 = 单价 * 数量 + 首重价格 + ( 总重量 - 首重) * 续重单价 ,然后设置这个属性即可,所有的中间运算过程都会保证不丢失精度。
/*** 是否使用逻辑短路特性*/
private boolean isShortCircuit = true;在很多业务决策系统中,往往需要对布尔条件表达式进行分析输出,普通的java运算一般会通过逻辑短路来减少性能的消耗。例如规则公式:
star > 10000 and shopType in ('tmall', 'juhuasuan') and price between (100, 900)
假设第一个条件 star>10000 不满足就停止运算。但业务系统却还是希望把后面的逻辑都能够运算一遍,并且输出中间过程,保证更快更好的做出决策。
/*** 是否输出所有的跟踪信息,同时还需要log级别是DEBUG级别*/
private boolean isTrace = false;这个主要是是否输出脚本的编译解析过程,一般对于业务系统来说关闭之后会提高性能。

二、execute执行参数

/*** 执行一段文本* @param expressString 程序文本* @param context 执行上下文,可以扩展为包含ApplicationContext* @param errorList 输出的错误信息List* @param isCache 是否使用Cache中的指令集,建议为true* @param isTrace 是否输出详细的执行指令信息,建议为false* @param aLog 输出的log* @return* @throws Exception*/
Object execute(String expressString, IExpressContext<String, Object> context, List<String> errorList, boolean isCache, boolean isTrace);

三、功能扩展API列表

1、执行器(ExpressRunner)

/*** 执行一段文本* @param expressString 程序表达式* @param context 执行上下文,可以扩展为包含ApplicationContext(动态入参等)* @param errorList 输出的错误信息List* @param isCache 是否使用Cache中的指令集,建议为true* @param isTrace 是否输出详细的执行指令信息,建议为false* @param aLog 输出的log* @return* @throws Exception*/
Object execute(String expressString, IExpressContext<String, Object> context, List<String> errorList, boolean isCache, boolean isTrace);

在这里插入图片描述

2、操作符定义Operator

/*** QLExpress主要通过子类实现Operator.java提供的以下方法来最简单的操作符定义,然后可以被通过addFunction或者addOperator的方式注入到ExpressRunner中。* 如果你使用Operator的基类OperatorBase.java将获得更强大的能力,基本能够满足所有的要求。*/
public abstract Object executeInner(Object[] list) throws Exception;

3、function相关API(ExpressRunner)

//通过name获取function的定义
OperatorBase getFunciton(String name);//通过自定义的Operator来实现类似:fun(a, b, c)
void addFunction(String name, OperatorBase op);//fun(a, b, c) 绑定 object.function(a, b, c)对象方法
void addFunctionOfServiceMethod(String name, Object aServiceObject, String aFunctionName, Class<?>[] aParameterClassTypes, String errorInfo);//fun(a, b, c) 绑定 Class.function(a, b, c)类方法
void addFunctionOfClassMethod(String name, String aClassName, String aFunctionName, Class<?>[] aParameterClassTypes, String errorInfo);//给Class增加或者替换method,同时支持 a.fun(b), fun(a, b) 两种方法调用
//比如扩展String.class的isBlank方法:"abc".isBlank()和isBlank("abc")都可以调用
void addFunctionAndClassMethod(String name, Class<?> bindingClass, OperatorBase op);

4、Operator相关API

//添加操作符号,可以设置优先级
void addOperator(String name, Operator op);
void addOperator(String name, String aRefOpername, Operator op);//替换操作符处理
OperatorBase replaceOperator(String name, OperatorBase op);//添加操作符和关键字的别名,比如 if..then..else -> 如果。。那么。。否则。。
void addOperatorWithAlias(String keyWordName, String realKeyWordName, String errorInfo);

5、宏定义相关API

//比如addMacro("天猫卖家", "userDO.userTag &1024 == 1024")
void addMacro(String macroName, String express);

6、语法校验API

String expressString = "for(i = 0; i < 10; i++) {sum = i + 1;} return sum;";
InstructionSet instructionSet = expressRunner.parseInstructionSet(expressString);
//如果调用过程不出现异常,指令集instructionSet就是可以被加载运行(execute)了!
http://www.lryc.cn/news/535172.html

相关文章:

  • Mp4视频播放机无法播放视频-批量修改视频分辨率(帧宽、帧高)
  • deepseek大模型集成到idea
  • AI基础 -- AI学习路径图
  • 在 Visual Studio Code 与微信开发者工具中调试使用 emscripten 基于 C 生成的 WASM 代码
  • elasticsearch实战应用从入门到高效使用java集成es快速上手
  • 【OneAPI】通过网页预渲染让搜索引擎收录网页
  • 【网络安全.渗透测试】Cobalt strike(CS)工具使用说明
  • 港中文腾讯提出可穿戴3D资产生成方法BAG,可自动生成服装和配饰等3D资产如,并适应特定的人体模型。
  • 【C语言标准库函数】标准输入输出函数详解[4]:二进制文件读写函数
  • Python:凯撒密码
  • C++引用深度详解
  • C++ Primer 语句作用域
  • github - 使用
  • 内网ip网段记录
  • k8s部署logstash
  • EF Core中实现值对象
  • 【分布式理论9】分布式协同:分布式系统进程互斥与互斥算法
  • 木材表面缺陷检测数据集,支持YOLO+COCO JSON+PASICAL VOC XML+DARKNET格式标注信息,平均正确识别率95.0%
  • Leetcodehot 力扣热题100 二叉搜索树中第 K 小的元素
  • Awtk 如何添加开机画面
  • 关于多语言商城系统的开发流程
  • IDEA中常见问题汇总
  • 计算机视觉-拟合
  • CSS 实现下拉菜单效果实例解析
  • DeepSeek模拟阿里面试——Mysql
  • MVVM设计模式
  • 解决:Cannot find a valid baseurl for repo: base/7/x86_64
  • ffmpeg -codecs
  • 社区版IDEA中配置TomCat(详细版)
  • 强化学习 DPO 算法:基于人类偏好,颠覆 PPO 传统策略