1.简介

Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。

2.Maven依赖

<dependency><groupId>com.googlecode.aviator</groupId><artifactId>aviator</artifactId><version>${aviator.version}</version>
</dependency>

3.使用

3.1.执行表达式

Aviator的使用方式比较简单,通过使用AviatorEvaluator.execute基本可以实现大部分功能:

package expression;import com.googlecode.aviator.AviatorEvaluator;public class Main {public static void main(String[] args) throws Exception {Long result = (Long) AviatorEvaluator.execute("1+2+3");System.out.println(result);}
}
//6

3.2. 使用变量

变量的使用有两种方法:execute()、exec();

  1. execute(),需要传递Map格式参数
  2. exec(),不需要传递Map

3.2.1. execute

package execute;import com.googlecode.aviator.AviatorEvaluator;
import java.util.HashMap;
import java.util.Map;public class Main {public static void main(String[] args) throws Exception {Map<String, Object> map = new HashMap<String, Object>();map.put("username", "Bob");System.out.println(AviatorEvaluator.execute("'hello: ' + username  + '!'", map));}
}
//hello: Bob!

3.2.2. exec

package exec;import com.googlecode.aviator.AviatorEvaluator;public class Main {public static void main(String[] args) {String username = "Bob";System.out.println(AviatorEvaluator.exec("'hello '+ username +'!'", username));}
}
//hello: Bob!

3.3. 使用函数

Aviator可以使用两种函数:内置函数、自定义函数

3.3.1. 使用内置函数

Aviator提供了非常多的内置函数。具体可以官方文档或者文章最后的参考链接。

package buildin;import com.googlecode.aviator.AviatorEvaluator;public class Main {public static void main(String[] args) {// sysdate() 获取当前时间Date// date_to_string(date,format) date转为StringSystem.out.println(AviatorEvaluator.execute("date_to_string(sysdate(),'yyyy-MM-dd HH:mm:ss')"));}
}

3.3.2. 自定义函数

自定义函数需要继承AbstractFunction类,重写目标方法。

package definedimport com.googlecode.aviator.AviatorEvaluator;
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 Main {public static void main(String[] args) {// 注册AviatorEvaluator.addFunction(new AddFunction());// 方式1System.out.println(AviatorEvaluator.execute("myAdd(12.23, -2.3)"));// 方式2Map<String, Object> params = new HashMap<String, Object>();params.put("a", 12.23);params.put("b", -2.3);System.out.println(AviatorEvaluator.execute("myAdd(a, b)", params));}
}class AddFunction extends AbstractFunction {@Overridepublic AviatorObject call(Map<String, Object> env, AviatorObject arg1, AviatorObject arg2) {double num1 = FunctionUtils.getNumberValue(arg1, env).doubleValue();double num2 = FunctionUtils.getNumberValue(arg2, env).doubleValue();return new AviatorDouble(num1 + num2);}public String getName() {return "myAdd";}
}
//9.93

4.总结

Aviator功能还是挺强大的,本文只做了简单的介绍,还有很多非常强大功能(正则表达式匹配、语法糖衣等),可以参考后面给的参考链接。

5. AviatorScript手册

https://www.yuque.com/boyan-avfmj/aviatorscript/tvahat

链接:https://www.jianshu.com/p/129e8e0e342a

表达式求值引擎Avitor的使用相关推荐

  1. Java表达式求值引擎Aviator(二)

    环境:Java8 + Aviator5.2.5 请先阅读<Java表达式求值引擎Aviator(一)> 使用示例 示例8: 三元运算符 public class TernaryOperat ...

  2. AVIATOR——轻量级JAVA表达式求值引擎

    简介 Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviator ...

  3. java aviator_Aviator 表达式求值引擎开源框架

    简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviato ...

  4. 表达式求值Spring.Expressions

    简介 Spring.Expressions命名空间可以用一种强大的表达式语言在运行时操作对象.这种语言可以读写属性值.调用方法.访问数组/集合/索引器的元素.进行算术和逻辑运算,同时支持命名变量,并且 ...

  5. 经典笔试上机考题-表达式求值

    相信参加过笔试面试同学应当见到过表达式求值这道题,下面列举的一道经典的考题,本文将同大家一起细细探讨一下表达式求值这一类问题的求法,希望抛砖引玉,其中有不妥的地方也请大家多多批评指正. /* 功能:四 ...

  6. NOIP2013普及组 T2 表达式求值

    OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 1 #include<iostream> 2 #include<algorithm> 3 #include&l ...

  7. 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)

    文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...

  8. 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)

    题目: 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话 ...

  9. C语言----表达式求值之隐式类型转换

    前言: 表达式求值的顺序一部分是由操作符的优先级和结合性决定. 同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型,称为隐式类型转换,下面给出隐式类型转换的详细讲解,希望对大家有所帮助~ 隐 ...

最新文章

  1. 用最简单的例子说明设计模式(一)之单例模式、工厂模式、装饰模式、外观模式...
  2. 已知两边和夹角求第三边长_数学九年级上册3.4.2节利用两边及夹角判定三角形相似微课视频|知识点...
  3. 【转】spin_lock、spin_lock_irq、spin_lock_irqsave区别
  4. 【计算机网络复习 数据链路层】3.5.4 CSMA-CD协议
  5. 和每个人密切相关的人工智能的应用
  6. 在C#中如何读写INI文件
  7. 大学英语综合教程四 Unit 7 课文内容英译中 中英翻译
  8. OpenCV探索之路(二十三):特征检测和特征匹配方法汇总
  9. 局部线性嵌入(Locally Linear Embedding,简称LLE)
  10. 使用Xposed去除微博国际版的启动广告
  11. 京东EB级全域大数据平台的演进与治理历程
  12. Deep Learning on Graphs: A Survey论文笔记
  13. 极路由 刷linux,极路由极壹HC6361刷OpenWrt固件教程
  14. 【AdaBoost算法】
  15. Windows XP自动登录
  16. 2005 TKDE Tri-Training: Exploiting Unlabeled DataUsing Three Classifiers
  17. 下一代互联网与通信技术IPV6
  18. 致远项目管理SPM案例:贵州省公路开发有限责任公司人力资源管理
  19. ue html快捷键,ue快捷键一览 UltraEdit (UE) 快捷键 ue 复制并粘贴当前行
  20. 华三交换机开启telnet ssh https登陆方式

热门文章

  1. 线性表对于什么时候选用顺序表?什么时候选用链表作为线性表的存储结构为宜?
  2. “中兴坠楼”事件冷思考:AI带来的失业潮,我们该何去何从?
  3. Android中图片资源格式的是,Android 项目图片资源文件的使用,适配以及优化
  4. bjoj1911 [Apio2010] 序列分割
  5. Oracle RAC 之 Clusterware
  6. 发言稿开场白范文_20个好的演讲稿开场白范文
  7. jzoj3058. 【NOIP2012模拟10.26】火炬手
  8. 本质矩阵E求解及运动状态恢复
  9. CentOS7无盘系统:nfs4_reclaim_open_state: Lock reclaim failed!
  10. 《Spring源码深度解析 郝佳 第2版》ApplicationContext