首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mvel动态表达式

Mvel动态表达式
EN

Stack Overflow用户
提问于 2015-05-12 17:39:47
回答 1查看 1.6K关注 0票数 1

你知道是否可以用Mvel动态计算一个表达式。例如:

代码语言:javascript
复制
VariableResolverFactory functionFactory = new MapVariableResolverFactory();
MVEL.eval("def SUM(op1,op2,op3) { result=0B; if(op1) result+=op2; else result+=op3; }  return result; ",functionFactory);

ParserContext ctx = new ParserContext()
Serializable s = MVEL.compileExpression("SUM(op1,op2,op3)", ctx);
contextMapFct.put("op1", "5 > 3"); // just as an example if it's useless
contextMapFct.put("op2", new BigDecimal(10));
contextMapFct.put("op3", new BigDecimal(30));
Object obj= MVEL.executeExpression(s, contextMapFct, this.functionFactory);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-13 03:45:39

做了很少的改变

1.)Brace在最后一次添加,是在return result;之前关闭。

(2) int result=0,添加了声明。

3. if(op1 == 'true'),它不是以boolean的形式出现,而是以String的形式出现

代码语言:javascript
复制
VariableResolverFactory functionFactory = new MapVariableResolverFactory();
MVEL.eval(
        "def SUM(op1,op2,op3) { int result=0; if(op1 == 'true') result+=op2; else result+=op3;   return result; }",
        functionFactory);

ParserContext ctx = new ParserContext();
Serializable s = MVEL.compileExpression("SUM(op1,op2,op3)", ctx);
Map contextMapFct = new HashMap();
contextMapFct.put("op1", "5 > 3"); // just as an example if it's useless
contextMapFct.put("op2", new BigDecimal(10));
contextMapFct.put("op3", new BigDecimal(30));
Object obj = MVEL.executeExpression(s, contextMapFct, functionFactory);
System.out.println(obj);

输出

代码语言:javascript
复制
30
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30197895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档