繁体   English   中英

Java:用于使用未知标识符进行表达式解析和评估的库

[英]Java: Library for expression parsing & evaluation with identifiers not known in advance

我需要评估一个布尔表达式。 目的是过滤一组带标签的项目 标记可以是任何名称(例如Java标识符)。

例如:

foo OR (bar AND !baz)

对于标记为:

  • foo费用
  • foo bar boo
  • 酒吧

我事先不知道需要哪个名字。 我已经检查了JEXL,但是它具有JexlContext ,它基本上是一个Map,需要在评估之前进行填充。

我需要一些库,该库调用回调函数来确定标识符是true还是false。 或任何其他允许标识符在评估之前未知的机制。

它必须像啤酒一样免费(用于Maven插件),因此Jep毫无疑问。

我可以使用什么?

您可以提供不依赖于MapJexlContext实现。 无需在评估之前填充它,您可以对待它的has进行检查, get为您的回调并忽略set的调用。

在Google的番石榴中尝试谓词

最简单的方法是使用自Java 6以来属于JDK的JavaScript。这是一个示例

    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    // populate variables foo, bar and baz to the engine, e.g.
    engine.put("foo", true);
    engine.put("bar", true);
    engine.put("baz", false);
    engine.eval("foo OR (bar AND !baz)"); 

有关更多信息,请查看Oracle的教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM