1

我有一个用例,其中一个对象存在一个字符串,该字符串具有针对另一个对象的属性进行评估的条件。例如 StudentEvaluator有条件

student.pastScore>70 && student.currentScore>90 && student.sportsParticipation=true

并且Student对象具有各自的属性。

E.g. pastScore, currentScore and sportsParticipation

现在StudentEvaluator条件字符串是在运行时创建的,并且必须评估为真或假。有许多 StudentEvaluator 在不同的条件下并行运行。现在 StudentEvaluator 在其评估函数中接受一个学生参数并评估条件。IE

public Class StudentEvaluator{

String condition;

  public StudentEvaluator(String condition){
    this.condition = condition;
  }

  evaluate(Student student){
    <<Code>>
  }

}

什么是最有效的评估方式?欢迎任何开箱即用的想法!:)

4

3 回答 3

3

过去这样做过。你有多种选择

  1. OGNL
  2. MVEL - 比 OGNL 性能更高。支持逻辑和条件运算符。
  3. SpEL - Spring Expression Language - 我的偏好。
于 2012-11-09T16:13:46.850 回答
1

如果属性遵循 JavaBeans 标准(即它们是具有 getter 和 setter 的字段),那么您可以使用Apache Commons / BeanUtils等技术。

示例代码:

Student student = // some student
Map<String, Object> studentProperties = BeanUtils.describe(student);
Integer currentScore = studentProperties.get("currentScore"); // etc.
于 2012-11-09T16:10:14.617 回答
0

这并不简单,实际上你需要一个表达式解析器语言,也许你可以使用现有的解决方案,即jexel

于 2012-11-09T16:05:28.270 回答