我想在java中创建动态条件语句 以下是我在文件中的表达,有数百个表达式,他们继续改变
0001|((condition1 == 100) && ((condition2 == 1) || (condition2 == 2) || (condition2 == 3)) && (condition3 > 74))
0002|((condition1 == 100) && ((condition2 == 1) || (condition2 == 2) || (condition2 == 3)) && (condition3 > 59) && ((condition4 == 3) || (condition5 > 30)))
这些表达式在我的班级中是硬编码的。
if(condition1==100 && ((condition2 == 1) || (condition2 == 2) || (condition2 == 3))){
if(condition3>74){
return "0001"
}
if(condition3>59 && ((condition4 == 3) || (condition5 > 30))){
return "0002"
}
}
我想创建像
这样的动态条件语句首先我检查所有有条件1 == 100的表达式
那么((condition2 == 1)||(condition2 == 2)||(condition2 == 3))
然后根据最终条件返回值
它类似于第一个DFS,然后是BFS
有些人可以让我知道如何检查第一个深度然后再检查Bredth First in java
答案 0 :(得分:1)
您的情况是:您需要定义很多条件并持续更改它。您需要有一个变化动态表达式的解决方案并定义新条件。
动态情况有两种解决方案,例如你的情况:
Rule Engine
。这非常有益,您可以从http://java.sun.com/developer/technicalArticles/J2SE/JavaRule.html查看更多信息
你可以从here看到它的开源实现。Dynamic Language
或Script Language
和Script
api。 在第二个解决方案中你有几个选择。我在下面写了一些:
Groovy
:一种完整而精彩的脚本语言。见http://groovy.codehaus.org/ Spring Expression Language
:Spring
用于调用简单表达式的解决方案。见http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/expressions.html BeanShell
:一种简单而精彩的脚本语言。还有更多动态语言,例如JRuby
,您可以通过简单的网络搜索来查看它。
您可以从here中阅读有关Script
api的更多信息。
<强>编辑:强>
对于示例,您可以使用BeanShell Script Language
作为以下内容:
首先创建一个名为test.bsh
的文件,其中包含打击内容:
if(variable_1 == 100 )
{
System.out.println("Sample condition checked and is true.");
}
else
{
System.out.println("Sample condition checked and is false.");
}
第二集variable_1
来自java:
import bsh.*;
Interpreter bsh = new Interpreter ();
bsh.set ("variable_1", 100);
并在最终调用脚本中如下:
bsh.source (script);
结果如下:
Sample condition checked and is true.
通过这种方法,您可以更改test.bsh
内容,而无需重新编译或重新启动。