博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个神奇的类库,可以执行字符串表达式
阅读量:4449 次
发布时间:2019-06-07

本文共 2026 字,大约阅读时间需要 6 分钟。

一种表达式语言的解析引擎JEXL ,mavne依赖如下。在做工程时候使用过

 

org.apache.commons
commons-jexl
2.1.1

  demo:

import java.util.HashMap;import java.util.List;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import org.apache.commons.jexl.Expression;import org.apache.commons.jexl.ExpressionFactory;import org.apache.commons.jexl.JexlContext;import org.apache.commons.jexl.JexlHelper;....../* * 初始化一个Cat对象 */Cat cat = new Cat() {	{		this.setAge(2);		this.setName("Tom");		this.setOwner(new People() {			{				this.setAge(24);				this.setName("yang");			}		});	}};		/* * 初始化一个List对象,列表里存入两个元素 *     第一个元素是一个字符串 *     第二个元素是一个整数 */List list = new ArrayList();list.add("Hello world !");list.add(11);Map map = new HashMap();map.put("cat", cat);map.put("people",cat.getOwner());		/* * 初始化一个JexlContext对象,它代表一个执行JEXL表达式的上下文环境 */JexlContext context = JexlHelper.createContext();		/* * 向执行JEXL表达式的上下文环境的变量字典中存入两个变量 *     键值 "tom" 对应变量 cat *     键值 "array" 对应变量 list  */context.getVars().put("tom", cat);context.getVars().put("array", list);context.getVars().put("map", map);/* * 定义要被求值的所有表达式  */String[] expressions = new String[]{        //嵌套属性	"tom.owner",	//嵌套属性	"tom.owner.name",	//嵌套属性的方法调用,表达式求值结果为方法返回值	"tom.owner.name.length()",	"array[0].toUpperCase()",	//内置通用方法size(),返回String,Map和List的长度	"size(tom.owner.name)",	//返回列表中第一个元素	"array[0]",	//+ 操作符 可用于字符串的连接	"array[0].toUpperCase()+array[0]",	//内置通用方法empty(),如果为空返回true,否则返回false	"empty(array[0])",	"empty(array[2])",	//通过键值 'cat' 获取字典中相应的值	"map['cat']",	//嵌套属性	"map['people'].name.length()"};		//对 expressions 中所有的表达式求值for(String expression : expressions){	//用ExpressionFactory类的静态方法createExpression创建一个Expression对象	Expression e = ExpressionFactory.createExpression(expression);	//对这个Expression对象求值,传入执行JEXL表达式的上下文环境对象	Object obj = e.evaluate(context);	//输出表达式求值结果	System.out.println(e.getExpression()+" = "+obj);}

  

转载于:https://www.cnblogs.com/leodaxin/p/9083930.html

你可能感兴趣的文章
微信小程序从零开始开发步骤(一)搭建开发环境
查看>>
SQL*Net more data to client
查看>>
Tcpdump使用方法总结
查看>>
PX4地面站QGroundControl在ubuntu下的安装
查看>>
react实现svg实线、虚线、方形进度条
查看>>
正则表达式高级用法【原】
查看>>
深入理解JavaScript系列(33):设计模式之策略模式
查看>>
关于户口
查看>>
Web
查看>>
函数名应用,闭包,装饰器初识
查看>>
【Python】python基础语法 编码
查看>>
springcloud---how2java--记录零碎的信息
查看>>
K-th largest element in an array
查看>>
并发编程之秒杀
查看>>
Windows 下面 redis 发布为服务的官方方法
查看>>
HDU 2066 一个人的旅行
查看>>
更新WordPress4.0访问速度慢问题解决办法
查看>>
那些容易忽略的事(1) -变量与运算符+
查看>>
九度oj 题目1252:回文子串
查看>>
面向对象
查看>>