MVEL表达式在预编译时未正确评估

时间:2016-07-15 01:25:38

标签: java expression mvel

假设ab是整数,而宠物的类型为HashMap<String, Integer>

当我预编译下面的表达式时,pets.containsKey(\"Dogs\")节点在CompiledExpression对象中是null。

CompiledExpression compiledExpression = new ExpressionCompiler("a > 0 && b > 0 && pets.containsKey(\"Dogs\")").compile();
return (boolean) MVEL.executeExpression(compiledExpression, params);

然而,当我做

之类的事情时
boolean res = (boolean) MVEL.eval("a > 0 && b > 0 && pets.containsKey(\"Dogs\")", params);

它工作得很好,我得到了适当的回复。

有没有办法预编译包含像hashmap这样的对象的表达式?

1 个答案:

答案 0 :(得分:0)

我在下面的两个作品中实现的方式相同,

    Map<String, String> pets = new HashMap<>();
    pets.put("dog", "DOG");
    pets.put("cat", "CAT");
    Integer a = 10;
    Integer b = 20;

    Map<String, Object> params = new HashMap<>();
    params.put("$a", a);
    params.put("$b", b);
    params.put("$map", pets);
    params.put("$key", "dog");

    CompiledExpression expression = new ExpressionCompiler("$a > 0 && $b > 0 && $map.containsKey($key)").compile();
    System.out.println(MVEL.executeExpression(expression, params));
    System.out.println(MVEL.eval("$a > 0 && $b > 0 && $map.containsKey($key)", params));