JAVA动态属性条件评估

时间:2012-11-09 15:48:20

标签: java oop conditional-statements evaluation

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

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

Student对象具有相应的属性。

E.g. pastScore, currentScore and sportsParticipation

现在StudentEvaluator条件字符串在运行时创建,必须评估为true或false。 有许多StudentEvaluators并行运行,具有不同的条件。 现在,StudentEvaluator在其评估函数中接受学生参数并评估条件。 即。

public Class StudentEvaluator{

String condition;

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

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

}

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

3 个答案:

答案 0 :(得分:2)

过去做过这件事。您有多个选项

  1. OGNL
  2. MVEL - 更高效的OGNL。支持logical and conditional operators.
  3. SpEL - Spring Expression Language - 我的偏好。

答案 1 :(得分:1)

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

示例代码:

Student student = // some student
Map<String, Object> studentProperties = BeanUtils.describe(student);
Integer currentScore = studentProperties.get("currentScore"); // etc.

答案 2 :(得分:0)

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