Динамическое Условное Заявление
Я хочу создать динамический условный оператор в 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
тогда для ((условие 2 == 1) || (условие 2 == 2) || (условие 2 == 3))
затем вернуть значение в соответствии с конечным условием
это что-то вроде сначала DFS, а затем BFS
может какое-то тело может дать мне идею, как проверить сначала Глубину, а затем Bredth Сначала в Java
1 ответ
Ваш случай таков: вы хотите определить очень много условий и менять их непрерывно. Вам нужно иметь решение для динамического изменения выражения и определения нового условия.
Есть два решения для динамической ситуации, такой как ваш случай:
- С помощью
Rule Engine
, Это очень полезно, вы можете увидеть больше информации на http://java.sun.com/developer/technicalArticles/J2SE/JavaRule.html и увидеть его реализацию с открытым исходным кодом отсюда. - С помощью
Dynamic Language
или жеScript Language
а такжеScript
апи.
Во втором решении у вас есть несколько вариантов. Я написал несколько в следующем:
Groovy
: Полный и замечательный язык сценариев. см. http://groovy.codehaus.org/Spring Expression Language
:Spring
решение для вызова простого выражения. см. http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/expressions.htmlBeanShell
: Простой, но замечательный язык сценариев.
Есть более динамичный язык, такой как JRuby
что вы можете увидеть это простым поиском в сети. Вы можете прочитать больше информации для Script
API в Java отсюда.
Отредактировано:
Для образца вы можете использовать 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
из Явы:
import bsh.*;
Interpreter bsh = new Interpreter ();
bsh.set ("variable_1", 100);
и в последнем скрипте вызова следующим образом:
bsh.source (script);
и результат будет следующим:
Sample condition checked and is true.
при таком подходе вы можете изменить test.bsh
содержимое без перекомпиляции или перезапуска.