Jexl执行动态字符串转换

时间:2019-06-13 10:19:48

标签: java jexl

我正在构建一个使用JEXL的评估程序。我知道如何在Jexl中引入工作区,但是那只允许一个类定义,我需要定义一个方法定义。在下面的示例中,为了访问Math的日志函数,我必须将其添加到函数上下文中。我希望能够计算一个表达式:“ log(5)”,即不使用限定符。

T$pattern

1 个答案:

答案 0 :(得分:0)

如果Math是唯一的函数源,则可以使用'null'命名空间。

Map<String, Object> funcs = new HashMap<String, Object>();
funcs.put(null, Math.class);
JexlEngine jexl = new JexlBuilder().namespaces(funcs).create();
JexlExpression je = jexl.createExpression("log(5)");
Object result = je.evaluate(null);
Assert.assertNotNull(result);

如果您不仅仅需要Math作为源,那么恐怕您将不得不创建自己的类来将每个方法委派给其源。