基于Java的表达式评估器

时间:2015-07-15 08:58:09

标签: java expression rhino arithmetic-expressions mvel

我需要一个表达式评估器,它可以让我评估一个表达式,如下所示:

(ItemWeight + PackageWeight) * 2

因此,给出以下输入:

ItemWeight = new Weight(2.0, LBS);
PackageWeight = new Weight(0.2, LBS);

输出为:Weight(4.4, LBS)

public class Weight {
   private final float value;
   private final Unit unit;

   public float getValue() { return value; }
   public Unit getUnit() { return unit; }

   public enum Unit {
       LB, KG, GRAMS;
   }
}

同样,我想添加/减去两个Amount对象(其中金额由值和货币符号组成)。

注意:在我的用例中可以假设不能添加/减少两个不具有相同单位的值,等等

我读到了MVEL,但似乎MVEL不能处理涉及POJO的算术表达式。想到的其他选择是Rhino和Commons EL。

我可以使用什么样的好库(如果需要扩展)来解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

Java不是C ++;你不能超载运营商。

使用流畅的界面来实现它可能并不具有视觉上的吸引力,但我会说它比你提议的更容易。

这很有趣,因为你不仅要考虑EL而且还要考虑EL。这个想法比你的Weight类更通用。它更像QuantityWithUnits。以下是您需要回答的一些问题:

  1. 如何禁止对具有不同单位的对象进行加减运算?
  2. 在分割和乘法时,您将如何考虑创建新单位?
  3. 你会允许标量乘法和除法吗?
  4. 您是否会禁止在单位数量上添加标量?或者你会在幕后默默创建具有相同单位的新对象吗?
  5. 你会有其他常见的物理操作吗?
  6. 您将如何使用单位和转化系统?
  7. 你可能会认为“我对所有这些都太聪明了;我只想做一些'简单实用'的事情”,但最终你必须回答所有这些。