简单介绍

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;
    }
}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐