【问题标题】:reusable condition/expression classes可重用的条件/表达式类
【发布时间】:2009-05-07 09:53:11
【问题描述】:

我曾多次需要一些类来表示和操作条件(通常在 UI 中,因此用户通过组合不同的条件类型来构建查询,然后代码可以根据要查询的底层系统进行转换,例如lucene 和一个分贝)。我到处搜索一组可重用的类,我确信这必须在许多现有的地方使用(所有初学者的表达式语言),但找不到任何容易使用的东西。我最终自己编写了两次代码,但对于没有重复使用我确定存在的东西感到很遗憾。

典型的需求是: - 几个运算符:and or etc - 可变数量的操作数 - 组合条件来构建表达式 - 表达式的序列化 - 解析/格式化来自/到字符串的表达式

有人发现过类似的东西吗?

【问题讨论】:

  • 这是一个非常有趣的问题
  • 好的,是的,Functors 似乎是我所需要的。我看到我只能将一个答案设置为接受的答案。不知道是什么习惯,接受第一个或更完整但后来的一个。谢谢!

标签: java expression functor


【解决方案1】:

听起来您可能正在寻找Functors(又名函数对象)。 如果是这样,这个SO question 将是相关的,wrt。选择:Commons functor(已经提到)是一种选择,但也有其他选择。

所有函子库都带有框架(非常简单;一元、二元谓词、映射功能,通过链接进行组合)和最常用的基本函数集。

【讨论】:

    【解决方案2】:

    看看Apache Commons Functor。例如。 UnaryPredicateUnaryAndUnaryOr 等。内置实现是可序列化的,但我不知道从字符串解析。不过,我认为这是实现您想要的一个非常好的开始。另外,看看基于库的this IBM tutorial

    【讨论】:

      【解决方案3】:

      听起来您正在寻找类似Hibernate Criteria API 的东西。缺点是你被绑定到一个数据库,或者更糟糕的是一个特定的持久性框架实现。而且它并不能满足你的所有要求,所以我认为这不是一个好的选择......

      【讨论】:

      • 实际上,我将这些条件/表达式转换为的其中之一是通过休眠条件 api 进行的 sql 查询(另一个是 lucene 查询,可能还有更多)。但我在想一些更中性的东西,它需要为每种情况定制一些能力(子类化或任何我没有深入考虑过的东西)。
      【解决方案4】:

      您可能想查看ANTLR

      【讨论】:

      • 那不是用来构建编译器之类的吗?我正在寻找的是更简单的东西。
      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      相关资源
      最近更新 更多