Java表达式计算工具-Aviator的使用
2022/9/5 1:23:00
本文主要是介绍Java表达式计算工具-Aviator的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java表达式计算工具-Aviator的使用
添加依赖:
<!-- https://mvnrepository.com/artifact/com.googlecode.aviator/aviator --> <dependency> <groupId>com.googlecode.aviator</groupId> <artifactId>aviator</artifactId> <version>5.3.0</version> </dependency>
Aviator 有两种常用的使用方式:
- 直接在Java代码中使用(表达式运算)
- 在.av脚本文件中使用
直接在Java代码中
基本使用: 引入依賴直接在Java代码中传入需要计算的表达式和变量的值
@Test public void test1() { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("x", 12); paramMap.put("y", 10); String expression = "x + y"; Long value = (Long) AviatorEvaluator.compile(expression).execute(paramMap); Assert.isTrue(NumberUtil.equals(value, 22L)); log.info("计算成功: {} = {}", expression, value); }
如上面代码所示:基本使用非常简单。直接使用AviatorEvaluator
类提供的方法即可, 使用Map<String, Object>
来传递表达式的参数。需要注意的是,传递参数的Map的Value类型必须是Object,
且计算返回的值默认是Object类型,需要根据代码上下文转换为所需要的类型。
av脚本中使用
先写一个.av的脚本, 语法和JS有点相似
脚本目录:resources/av/test1.av
let a = 1; let c = -2; println(a + b);
再在Java代码中调用执行
@Test public void testSimpleAvScript() { Expression expression = AviatorEvaluator.getInstance().compileScript("av/test1.av"); expression.execute(); }
Aviator计算数字类型转换
-
传入整数:无论Java代码中传入的整数是byte/stort/int/long 都会被转换成long,对于比long大的数会被转换成BigInteger, 若表达式中有数字以N结尾,Aviator自动识别为BigInteger。
-
传入浮点数:无论Java代码中传入float/double都会被转换成double。
-
精确计算:Aviator中的BigDecimal对应BigDecimal,当在Java中传入BigDecimal类型的数或表达式中有以M结尾的数都会被解析成BigDecimal。
-
单一类型参与的运算,结果仍然为该类型,比如整数和整数相除仍然是整数,double 和 double 运算结果还是 double。
-
多种类型参与的运算,按照下列顺序:
long -> bigint -> decimal -> double
自动提升,比如 long 和 bigint 运算结果为 bigint, long 和 decimal 运算结果为 decimal,任何类型和 double 一起运算结果为 double
参考文档:
AviatorScript相关语法详情请: https://www.yuque.com/boyan-avfmj/aviatorscript/lvabnw
这篇关于Java表达式计算工具-Aviator的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API