gpt4 book ai didi

java - Jexl3 中自定义类的运算符重载/定义

转载 作者:行者123 更新时间:2023-11-30 06:47:10 41 4
gpt4 key购买 nike

我正在尝试在 Jexl 表达式中实现一个行为类似于 Boolean 的自定义类:

例子:对象结果 = jexl.createExpression("a || b").evaluate(context)

其中 ab 是包含 boolean 的自定义类的实例和应通过评估表达式携带的额外信息,因此最后可以在 result 中访问它。

我读到 Jexl3 应该支持运算符重载,它似乎具有为自定义类定义自己的运算符的所有必要结构 - 但是我无法理解这样做需要哪些步骤。

我已经尝试通过自定义实现扩展 UberspectJexlArithmetic,但是我只发现使用 toBoolean 我可以转换我的自定义对象到 Boolean(这使得 result 成为 Boolean - 因此我丢失了所有额外信息)。

如何正确使用/扩展 Jexl 来为自定义类提供 boolean 运算符?

最佳答案

只需扩展JexlArithmetic 类并覆盖其中的or 方法。

public class ExtendedJexlArithmetic extends JexlArithmetic
{
public Object or(YourCustomClass left, YourCustomClass right)
{
return left.or(right); // make sure you've implemented 'or' method inside your class
}
}

然后尝试以下:

JexlContext jexlContext = new MapContext();

jexlContext.set("a", new YourCustomClass());
jexlContext.set("b", new YourCustomClass());

JexlEngine jexlEngine=new JexlBuilder().arithmetic(new ExtendedJexlArithmetic (true)).create();

System.out.println(jexlEngine.createScript("a | b").execute(jexlContext);

关于java - Jexl3 中自定义类的运算符重载/定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46325890/

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