在运行时将字符串解析为Java代码



我有一个用Java编写的过滤应用程序,它将允许我根据公司的基本原理(例如税前利润,股息收益率等)过滤公司。

我已经创建了一个过滤引擎,目前它是硬编码的,可以接受编译时给出的过滤器。

我想做的是打开一个web服务,在那里我可以传入JSON来运行过滤,使用在运行时定义和传入的过滤器。

为此,我需要以某种方式将字符串转换为Java代码。

例如JSON中的字符串

current.preTaxProfit > previous.preTaxProfit
在Java代码中加入

:

return current.getPreTaxProfit() > previous.getPreTaxProfit();

我的主要问题是解析数学字符串,如:

current.preTaxProfit > (previous.preTaxProfit * 1.10)

事情很快就会变得非常复杂,特别是当涉及到内括号之类的,以及遵守BODMAS时。

有没有专门用于解析数学字符串的库,或者有人知道有什么好的资源可以帮助我吗?

例如,我发现了这个:

Javaassist: http://davidwinterfeldt.blogspot.co.uk/2009/02/genearting-bytecode.html

有人有使用Javaassist的经验吗?在我的体系结构中,我传入具有实现的"回调"方法的对象,因此创建整个类和方法的能力可能很有用。

两种可能:

    Java脚本API:
  • EL,表达式语言。

脚本API可能是最快获得结果的,但是EL更好。

考虑使用表达式语言,例如JEXL。

如果您将currentprevious放入上下文中,只需计算:

current.preTaxProfit > (previous.preTaxProfit * 1.10)

完整的示例:

// create context
JexlContext jc = new MapContext();
context.set("current", someObject);
context.set("previous", anotherObject);
// create expression
String jexlExp = "current.preTaxProfit > (previous.preTaxProfit * 1.10)";
Expression e = jexl.createExpression(jexlExp);
// evaluate
Object result = e.evaluate(jc);

相关内容

  • 没有找到相关文章

最新更新