2016-07-15 9 views
0

Давайте предположат a, b представляют собой целые числа, а также домашние животные имеют типа HashMap<String, Integer>MVEL Выражение не оценки должным образом, когда предварительно скомпилированные

Когда я предварительную компиляцию ниже выражение, то pets.containsKey(\"Dogs\") узла является нулевым внутри объекта CompiledExpression.

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); 

Это прекрасно работает, и я получаю соответствующий ответ обратно.

Есть ли способ прекомпилировать выражение, содержащее объект как хэш-карту?

+0

вместо жестких параметров кодирования, вы можете использовать 'Map ', пожалуйста, смотрите ответ отправил – Saravana

ответ

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)); 
+0

какую версию вы используете? – Ramie

+0

Последняя версия из репозитория maven – Saravana

 Смежные вопросы

  • Нет связанных вопросов^_^