- 说明:aviator用于表达式求值
- 引入依赖
| <dependency> |
| <groupId>com.googlecode.aviator</groupId> |
| <artifactId>aviator</artifactId> |
| <version>${aviator.version}</version> |
| </dependency> |
- 使用aviator的内置函数计算
- 不使用内置函数计算表达式的代码(我们此外还可以使用内置函数)
注意:一下的代码,每个 try catch 块里面就是一个测试,直接复制运行就行
| import com.googlecode.aviator.AviatorEvaluator; |
| import com.googlecode.aviator.exception.FunctionNotFoundException; |
| import com.googlecode.aviator.runtime.function.AbstractFunction; |
| import com.googlecode.aviator.runtime.function.FunctionUtils; |
| import com.googlecode.aviator.runtime.type.AviatorDouble; |
| import com.googlecode.aviator.runtime.type.AviatorObject; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| |
| |
| |
| public class EasyTest { |
| |
| public static void main(String[] args){ |
| try{ |
| Object execute = AviatorEvaluator.execute("30 + 1 + 2"); |
| System.out.println(execute); |
| } |
| catch (Exception e){ |
| e.printStackTrace(); |
| } |
| |
| try{ |
| System.out.println(AviatorEvaluator.execute("(23 - 3) ** 5")); |
| } |
| catch (Exception e){ |
| e.printStackTrace(); |
| } |
| |
| try{ |
| Map<String,Object> paramsMap = new HashMap<>(); |
| paramsMap.put("value","3"); |
| System.out.println(AviatorEvaluator.execute("3*Integer.parseInt(value)", paramsMap)); |
| } |
| catch (Exception e){ |
| throw e; |
| } |
| |
| try{ |
| String value = "3"; |
| |
| |
| |
| System.out.println(AviatorEvaluator.exec("3 * Integer.parseInt(value)", value)); |
| } |
| catch (Exception e){ |
| throw e; |
| } |
| |
| |
| try{ |
| class Add extends AbstractFunction { |
| |
| |
| |
| |
| |
| |
| |
| @Override |
| public AviatorObject call(Map<String, Object> env, AviatorObject arg1, AviatorObject arg2) { |
| double left = FunctionUtils.getNumberValue(arg1,env).doubleValue(); |
| double right = FunctionUtils.getNumberValue(arg2,env).doubleValue(); |
| |
| |
| |
| return new AviatorDouble(left + right); |
| } |
| |
| @Override |
| public String getName() { |
| return "add"; |
| } |
| } |
| |
| AviatorEvaluator.addFunction(new Add()); |
| Map<String,Object> paramMap = new HashMap<>(10); |
| paramMap.put("param1",100); |
| paramMap.put("param2",1); |
| System.out.println(AviatorEvaluator.execute("add(param1,param2)", paramMap)); |
| } |
| catch (Exception e){ |
| throw e; |
| } |
| |
| |
| try{ |
| } |
| catch (Exception e){ |
| throw e; |
| } |
| |
| |
| |
| } |
| } |
总结:
| AvaatorEvaluator.execute("name(XXX)"); |
| AvaatorEvaluator.execute("name(XXX)",paramsMap); |
| |
| class f extends AbstractFunction{ |
| |
| @Override public getName(){ |
| return "name" |
| } |
| } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步