简单介绍
Aviator是一个高性能、轻量级的基于java实现的表达式引擎,它动态地将String类型的表达式编译成Java ByteCode并交给JVM执行。
想了解这个库的中文使用文档的,可以点击Aviator
pom可以这样添加
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>5.2.5</version>
</dependency>
一般来说,可以使用AviatorEvaluator.execute方法来进行表达式计算
public static Object execute(String expression, Map<String, Object> env)
expression是表达式,比如"x*1.5+30"
env是参数与参数值的映射关系,比如<“x”,3>
调用方法后的计算结果就是3*1.5+30,即34.5,是一个浮点数。
容易踩到的坑
AviatorEvaluator.execute的返回结果是Object,但这个Object不是某个固定的子类,它的返回值可能是BigInt、double、Decimal、甚至是Boolean,具体类型取决于你的表达式定义,参考此文章
如果你希望获取到的最终结果是一个统一的浮点数,则需要写一个转换方法,举个例子
public double convertToDouble(Object obj) {
if (obj instanceof Boolean) {
return (Boolean) obj ? 1 : 0;
} else if (obj instanceof Long) {
return ((Long) obj).doubleValue();
} else if (obj instanceof Double) {
return (Double) obj;
} else {
return 0;
}
}