JAVA动态属性条件评估

JAVA动态属性条件评估,java,oop,conditional-statements,evaluation,Java,Oop,Conditional Statements,Evaluation,我有一个用例,其中一个对象包含一个字符串,该字符串具有针对另一个对象的属性求值的条件。 例如。 学生评估员有条件 student.pastScore>70 && student.currentScore>90 && student.sportsParticipation=true 和Student对象具有各自的属性 E.g. pastScore, currentScore and sportsParticipation 现在,StudentEval

我有一个用例,其中一个对象包含一个字符串,该字符串具有针对另一个对象的属性求值的条件。 例如。 学生评估员有条件

student.pastScore>70 && student.currentScore>90 && student.sportsParticipation=true
和Student对象具有各自的属性

E.g. pastScore, currentScore and sportsParticipation
现在,StudentEvaluator条件字符串是在运行时创建的,必须对其求值为true或false。 有许多学生评估员在不同的条件下并行运行。 现在,StudentEvaluator在其求值函数中接受student参数并计算条件。 i、 e

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

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

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

如果属性遵循JavaBeans标准,即它们是带有getter和setter的字段,然后你可以使用像这样的技术

示例代码:

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

如果属性遵循JavaBeans标准,即它们是带有getter和setter的字段,那么您可以使用如下技术

示例代码:

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

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

OGNL -比OGNL性能更好。支持 -我喜欢。
过去是这样做的。你有多种选择

OGNL -比OGNL性能更好。支持 -我喜欢。
好的。你能评论一下它的效率吗?@盘古为你提供了更多的替代方案,你说的效率是什么意思?解析表达式是一项常见的任务,可以非常高效地完成,这不应该是一个问题。好的。谢谢但问题是,这只是一个用例的POC,在这个用例中,大约10000名学生评估者将有他们各自的条件。因此,我们需要一种方法来处理这个问题:假设条件由字符串对象表示,我认为没有比使用表达式解析器更有效的解决方案了。否则,您应该使用更复杂的数据结构来表示条件,该数据结构直接包含要在每个节点上使用逻辑子句求值的表达式的树结构。这样的话,你就不需要解析阶段,但你需要付出更复杂的代码开发成本。好吧。你能评论一下它的效率吗?@Pangea为你提供了更多的替代解决方案,你说的效率是什么意思?解析表达式是一项常见的任务,可以非常高效地完成,这不应该是一个问题。好的。谢谢但问题是,这只是一个用例的POC,在这个用例中,大约10000名学生评估者将有他们各自的条件。因此,我们需要一种方法来处理这个问题:假设条件由字符串对象表示,我认为没有比使用表达式解析器更有效的解决方案了。否则,您应该使用更复杂的数据结构来表示条件,该数据结构直接包含要在每个节点上使用逻辑子句求值的表达式的树结构。这样的话,你就不需要解析阶段了,但是你需要为开发更复杂的代码付出代价。谢谢,但问题是这只是一个用例的POC,大约10000名StudentEvaluator会有他们各自的条件。那么,这是否可以扩展到该级别?这能通过更好的方法实现吗?所以我们要求一种方法来处理这个问题:谢谢,但问题是这只是一个用例的POC,大约10000名学生评估员会有他们各自的条件。那么,这是否可以扩展到该级别?这能通过更好的方法实现吗?所以我们要求一种方法来处理这个问题:谢谢,但问题是这只是一个用例的POC,大约10000名学生评估员会有他们各自的条件。那么,这是否可以扩展到该级别?这能通过更好的方法实现吗?因此,我们需要一种方法来处理这个问题:所有三个规模都远远超过100000个——这大致是我的批量记录。请确保预先解析表达式并缓存它们。@RameshPapaganti修复了所有的linksthank,但问题是这只是一个用例的POC,大约10000名studentevaluator会有各自的条件。那么,这是否可以扩展到该级别?这能通过更好的方法实现吗?因此,我们需要一种方法来处理这个问题:所有三个规模都远远超过100000个——这大致是我的批量记录。确保预先分析表达式并缓存它们。@RameshPapaganti修复了所有链接