表达式求值引擎Avitor的使用
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();
- execute(),需要传递Map格式参数
- 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的使用相关推荐
- Java表达式求值引擎Aviator(二)
环境:Java8 + Aviator5.2.5 请先阅读<Java表达式求值引擎Aviator(一)> 使用示例 示例8: 三元运算符 public class TernaryOperat ...
- AVIATOR——轻量级JAVA表达式求值引擎
简介 Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviator ...
- java aviator_Aviator 表达式求值引擎开源框架
简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviato ...
- 表达式求值Spring.Expressions
简介 Spring.Expressions命名空间可以用一种强大的表达式语言在运行时操作对象.这种语言可以读写属性值.调用方法.访问数组/集合/索引器的元素.进行算术和逻辑运算,同时支持命名变量,并且 ...
- 经典笔试上机考题-表达式求值
相信参加过笔试面试同学应当见到过表达式求值这道题,下面列举的一道经典的考题,本文将同大家一起细细探讨一下表达式求值这一类问题的求法,希望抛砖引玉,其中有不妥的地方也请大家多多批评指正. /* 功能:四 ...
- NOIP2013普及组 T2 表达式求值
OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 1 #include<iostream> 2 #include<algorithm> 3 #include&l ...
- 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)
文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...
- 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)
题目: 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话 ...
- C语言----表达式求值之隐式类型转换
前言: 表达式求值的顺序一部分是由操作符的优先级和结合性决定. 同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型,称为隐式类型转换,下面给出隐式类型转换的详细讲解,希望对大家有所帮助~ 隐 ...
最新文章
- 用最简单的例子说明设计模式(一)之单例模式、工厂模式、装饰模式、外观模式...
- 已知两边和夹角求第三边长_数学九年级上册3.4.2节利用两边及夹角判定三角形相似微课视频|知识点...
- 【转】spin_lock、spin_lock_irq、spin_lock_irqsave区别
- 【计算机网络复习 数据链路层】3.5.4 CSMA-CD协议
- 和每个人密切相关的人工智能的应用
- 在C#中如何读写INI文件
- 大学英语综合教程四 Unit 7 课文内容英译中 中英翻译
- OpenCV探索之路(二十三):特征检测和特征匹配方法汇总
- 局部线性嵌入(Locally Linear Embedding,简称LLE)
- 使用Xposed去除微博国际版的启动广告
- 京东EB级全域大数据平台的演进与治理历程
- Deep Learning on Graphs: A Survey论文笔记
- 极路由 刷linux,极路由极壹HC6361刷OpenWrt固件教程
- 【AdaBoost算法】
- Windows XP自动登录
- 2005 TKDE Tri-Training: Exploiting Unlabeled DataUsing Three Classifiers
- 下一代互联网与通信技术IPV6
- 致远项目管理SPM案例:贵州省公路开发有限责任公司人力资源管理
- ue html快捷键,ue快捷键一览 UltraEdit (UE) 快捷键 ue 复制并粘贴当前行
- 华三交换机开启telnet ssh https登陆方式
热门文章
- 线性表对于什么时候选用顺序表?什么时候选用链表作为线性表的存储结构为宜?
- “中兴坠楼”事件冷思考:AI带来的失业潮,我们该何去何从?
- Android中图片资源格式的是,Android 项目图片资源文件的使用,适配以及优化
- bjoj1911 [Apio2010] 序列分割
- Oracle RAC 之 Clusterware
- 发言稿开场白范文_20个好的演讲稿开场白范文
- jzoj3058. 【NOIP2012模拟10.26】火炬手
- 本质矩阵E求解及运动状态恢复
- CentOS7无盘系统:nfs4_reclaim_open_state: Lock reclaim failed!
- 《Spring源码深度解析 郝佳 第2版》ApplicationContext