1 回答

TA貢獻(xiàn)1846條經(jīng)驗 獲得超7個贊
您需要將變量添加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());
原因是,以下構(gòu)造函數(shù)的可見性不是public。
MVELInterpretedRuntime(String expression, VariableResolverFactory resolverFactory) {
setExpression(expression);
this.variableFactory = resolverFactory;
}
因此,您需要在客戶端程序中填充一個上下文對象,并將該對象與表達(dá)式一起傳遞給評估 MVEL 表達(dá)式的程序/方法。在我的程序中,這是main我填充上下文對象以及評估 MVEL 表達(dá)式的方法。
添加回答
舉報