Liquor Java 表达式引擎

Maven依赖

<dependency>
    <groupId>org.noear</groupId>
    <artifactId>liquor-eval</artifactId>
    <version>1.4.0</version>
</dependency>

代码示例

package com.example.test;

import com.google.common.collect.Maps;
import org.noear.liquor.eval.CodeSpec;
import org.noear.liquor.eval.Exprs;

import java.util.HashMap;
import java.util.Map;

public class LiquorTest {

    public static void main(String[] args) throws Exception {
        // 数学运算 (Long)
        Integer result = (Integer) Exprs.eval("1+2+3");
        System.out.println(result); // 6

        // 数学运算 (Double)
        Double result2 = (Double) Exprs.eval("1.1+2.2+3.3");
        System.out.println(result2); // 6.6

        // 包含关系运算和逻辑运算
        System.out.println(Exprs.eval("(1>0||0<1)&&1!=0")); // true

        // 三元运算
        System.out.println(Exprs.eval("4 > 3 ? \"4 > 3\" : \"4 <= 3\"")); // 4 > 3

        Map<String, Object> context = Maps.newHashMap();
        context.put("a", 1);
        context.put("b", 2);
        Object eval = Exprs.eval("(a + b) * 2", context);
        System.out.println(eval);

        context = new HashMap<>();
        context.put("a", 1);
        context.put("b", 2);
        Object eval1 = Exprs.eval("int c; if (a < 0) { c=b; } else { c=0; } return c;", context);
        System.out.println(eval1);

        CodeSpec exp5 = new CodeSpec("Math.min(1,2)").imports(Math.class);
        System.out.println(Exprs.eval(exp5));

        CodeSpec exp6 = new CodeSpec("min(11,21)").imports("static java.lang.Math.*");
        System.out.println(Exprs.eval(exp6));
    }
}

对比Groovy表达式更简洁,有机会了在项目里试试。

posted @ 2025-03-20 20:49  商商-77  阅读(23)  评论(0)    收藏  举报