1

我的表情是这样的:($a+$b)/$c

String expr = "($a+$b)/$c";
Float sum = Float.valueOf("2.2");
HashMap<String, Float> valueMap =  new HashMap<String,Float>();
valueMap.put("$".concat(a)), sum);
sum = sum + Float.valueOf("1");
valueMap.put("$".concat(b)), sum );
sum = sum + Float.valueOf("1");
valueMap.put("$".concat(c)), sum );
VariableResolverFactory myVarFactory = new MapVariableResolverFactory();

Serializable compileExpression = MVEL.compileExpression(mtrExprD, valueMap); // here,     Only a map of < String,Object > is allowed.

MVEL.executeExpression(compileExpression, myVarFactory); // This should return me a float Value.

MVEL.executeExpression()返回一个对象;我想myExpression返回一个浮点值而不是一个对象。如何解决这个问题?

4

2 回答 2

0

Mvel 总是返回对象,我们需要检查instanceOffor sayBooleanFloat。此外,在使用算术运算符进行计算时,使用 null 安全值更安全。

例如,如果

你的 exp 是a * b,如果 a 或 b 是null,那么 Mvel 给出的结果是false

于 2014-06-18T08:19:04.837 回答
-1
MVEL#executeExpression  return the Object

您必须将其转换为 Float

Float result = (Float) MVEL.executeExpression(compileExpression, myVarFactory);

像这样

Serializable  compiled = MVEL.compileExpression("x * y"); 
Map<String, Integer> vars = new HashMap<>();
    vars.put("x", new Integer(5));
    vars.put("y", new Integer(10));
    // Executes the compiled expression
Integer result = (Integer) MVEL.executeExpression(compiled, vars); 

参见 Mvel文档

于 2014-04-28T13:41:57.400 回答