我使用 JEXL 表达式,因此用户可以在运行时指定表达式,我的应用程序将相应地处理它们。现在作为一种特殊情况,用户想要比较浮点值,但是在 JEXL 上下文中,这些变量包含像“6.8”这样的字符串。JEXL 引擎抱怨它不能处理字符串和数字。到目前为止,一切都很好。
但是在https://commons.apache.org/proper/commons-jexl/reference/syntax.html我看不到任何类型转换的提示。
有没有办法将字符串转换为在表达式中浮动?
我使用 JEXL 表达式,因此用户可以在运行时指定表达式,我的应用程序将相应地处理它们。现在作为一种特殊情况,用户想要比较浮点值,但是在 JEXL 上下文中,这些变量包含像“6.8”这样的字符串。JEXL 引擎抱怨它不能处理字符串和数字。到目前为止,一切都很好。
但是在https://commons.apache.org/proper/commons-jexl/reference/syntax.html我看不到任何类型转换的提示。
有没有办法将字符串转换为在表达式中浮动?
所以我找到了一种使用函数命名空间来解决这个问题的方法(参见https://commons.apache.org/proper/commons-jexl/reference/syntax.html#Functions)。由于这方面的文档似乎很少,我正在发布解决方案。
使用通过命名空间添加的附加功能创建 JexlEngine。
Map<String, Object> namespace = new TreeMap<>();
namespace.put("float", Float.class);
JexlBuilder builder = new JexlBuilder();
builder.silent(false);
builder.strict(true);
builder.namespaces(namespace);
JexlEngine engine = builder.create();
有了这个,你将能够处理像这样的表达式
float:parseFloat("10") > 8
所以现在可以在公式中进行类型转换。