gpt4 book ai didi

java - 如何在 MVEL 表达式中使用变量?

转载 作者:行者123 更新时间:2023-12-02 16:51:21 33 4
gpt4 key购买 nike

我在我的 Java 代码中有预定义的变量,我想在 MVEL 表达式中使用这些变量。我不想传递上下文。

String Col1 = "C";
String Col2 = "D";
String expression = "Col1 == 'C' && Col2 == 'D'";

Boolean result = (Boolean) MVEL.eval(expression);

如何读取变量值并将表达式评估为真或假?

最佳答案

您需要将变量 col1col2 添加到上下文对象,然后将此对象传递给 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 表达式。

关于java - 如何在 MVEL 表达式中使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58579920/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com