Вам необходимо добавить свои переменные col1
и col2
к объекту контекста, а затем передать этот объект MVEL.eval
. Ниже приведен рабочий пример:
import java.util.HashMap;
import java.util.Map;
import org.mvel2.MVEL;
public class Test {
public static void main(String[] args) {
Map<String, Object> context = new HashMap<String, Object>();
String col1 = "C";
String col2 = "D";
context.put("col1", col1);
context.put("col2", col2);
String expression = "col1 == 'C' && col2 == 'D'";
Boolean result = (Boolean) MVEL.eval(expression,context);
System.out.println(result);//true
expression = "col1 == 'E' && col2 == 'D'";
result = (Boolean) MVEL.eval(expression,context);
System.out.println(result);//false
}
}
Не стесняйтесь, дайте мне знать, если у вас возникнут какие-либо сомнения.
Обновление: Следующее обновление должно объяснитьзачем вам нужен объект контекста (вы упомянули в своем комментарии, что не хотите добавлять свои переменные в объект контекста).
Если вы загляните в документацию по https://github.com/mvel/mvel/blob/master/src/main/java/org/mvel2/MVEL.java,, вы будетевозникает искушение использовать следующий метод:
public static Object eval(String expression) {
return new MVELInterpretedRuntime(expression, new ImmutableDefaultFactory()).parse();
}
Однако следующий фрагмент кода не будет скомпилирован:
String col1 = "C";
String col2 = "D";
String expression = "col1 == 'C' && col2 == 'D'";
System.out.println(new MVELInterpretedRuntime(expression, new ImmutableDefaultFactory()).parse());
Причина этого в том, что видимость следующего конструкторане public
.
MVELInterpretedRuntime(String expression, VariableResolverFactory resolverFactory) {
setExpression(expression);
this.variableFactory = resolverFactory;
}
Итак, вам необходимо заполнить объект контекста в вашей клиентской программе и передать этот объект вместе с выражением программе / методу, оценивающему выражение MVEL. В моей программе это метод main
, в котором я заполняю объект контекста, а также вычисляю выражение MVEL.