Aviator学习笔记

什么是Aviator

Aviator是一个轻量级、高性能的、使用java语言实现的一个求值引擎,它能够动态的将表达式编译成字节码并运行,主要用于各种表达式的动态求值。

Aviator的特性

  1. 支持大部分运算操作符,包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(=~)、三元表达式?: ,并且支持操作符的优先级和括号强制优先级。
  2. 支持大整数和精度运算(2.3.0版本引入)。
  3. 支持函数调用和自定义函数。
  4. 内置支持正则表达式匹配,类似Ruby、Perl的匹配语法,并且支持类Ruby的$digit指向匹配分组。
  5. 自动类型转换,当执行操作的时候,会自动判断操作数类型并做相应转换,无法转换即抛异常。
  6. 支持传入变量,支持类似a.b.c的嵌套变量访问。
  7. 函数式风格的seq库,操作集合和数组。
  8. 性能优秀。

引入依赖

<dependency>
	<groupId>com.googlecode.aviator</groupId>
	<artifactId>aviator</artifactId>
	<version>3.3.0</version>
</dependency>

Aviator的所有操作都是通过 AviatorEvaluator 类来实现的。
它提供了一系列的静态方法给我们使用,一般我们最长用到的就是下面两种方法:

AviatorEvaluator.compile
AviatorEvaluator.execute

execute示例:

Integer a = 6;
Map<String, Object> env = new HashMap<>();
env.put("a1", a);
System.out.println(AviatorEvaluator.execute("'a1的值是:' + a1", env));

输出:a1的值是:6

Map<String, Object> env = new HashMap<>();
int b = 2, c= 3, d=4, e =5;
env.put("b", b);
env.put("c", c);
env.put("d", d);
env.put("e", e);
Long result = (Long) AviatorEvaluator.execute("b + c + d + e", env);
System.out.println("b + c + d + e的值是:" + result);

输出:b+c+d+e的值是:14
也可以使用表达式的形式实现:

Map<String, Object> env = new HashMap<>();
String expression = "b + c + d + e";
Expression compiledExp = AviatorEvaluator.compile(expression);
int b = 2, c= 3, d=4, e =5;
env.put("b", b);
env.put("c", c);
env.put("d", d);
env.put("e", e);
//编译表达式
Long result = (Long) compiledExp.execute(env);
System.out.println("b + c + d + e的值是:" + result);

Aviator三元运算

Map<String, Object> env = new HashMap<>();
Integer a = 6;
env.put("a1", a);
System.out.println(AviatorEvaluator.execute("a1>0 ? 'yes' : 'no'", env));

输出:yes

函数调用

//判断当前字符串长度
System.out.println(AviatorEvaluator.execute("string.length('helloworld')"));//输出:10 
//判断字符串是否包含字符串
System.out.println(AviatorEvaluator.execute("string.contains('hello','h')"));  //输出:true
//是否以子串开头
System.out.println(AviatorEvaluator.execute("string.startsWith('hello','h')")); //输出:true

以上仅为本人初次接触Aviator相关学习实践,如有不对,还请各位指教!~
Aviator学习笔记

Aviator相关推荐链接:
API文档
https://developer.aliyun.com/article/608829
https://blog.csdn.net/narutoconanking/article/details/85162688

上一篇:Java--字符串相关类


下一篇:青铜到王者 ,快速提升你 Go语言的段位! "狗"语言实战(一)-介绍