Как реализовать многочисленные условия в Java, кроме случая переключения и если / иначе? - PullRequest
0 голосов
/ 07 мая 2019

Необходимо реализовать требование, при котором поток кода будет определяться на основе большого количества случаев, если он реализован с использованием регистра переключателя, ИЛИ большого количества if / else!

Пример кода для реализации:

if(flag='1')
   Invoke a new route

else If(flag='2')
   Invoke route2
.
.
.
.
else if(flag= 30)
  Invoke route 30

Есть ли лучший подход для написания таких случаев, кроме операторов if / else или переключений случаев?

Что-то похожее на внутреннюю реализацию механизмов рабочих процессов, например jBPM, но я на самом деле не могу включить механизм рабочих процессов, так как это делает приложение тяжелым!

Любые предложения приветствуются!

1 Ответ

1 голос
/ 07 мая 2019

Вот то, о чем я говорил выше.


    import java.util.function.*;

    public class MethodCalls {

       public static void main(String[] args) {
          new MethodCalls().start();
       }

       public void start() {
          Map<Integer, Function<Integer, Integer>> callTable = new HashMap<>();
          callTable.put(1, a -> prod(a));
          callTable.put(2, a -> sub(a));
          Random r = new Random();
          r.ints(10, 1, 3).forEach(b -> System.out.println("The answer is "
                + callTable.get(b).apply(r.nextInt(20) + 20) + "\n"));
       }

       public int prod(int v) {
          System.out.println("Multiplying " + v + " by " + 40);
          return v * 40;
       }

       public int sub(int v) {
          System.out.println("Subtracting " + 30 + " from " + v);
          return v - 30;
       }
    }

Это просто игрушка, но она демонстрирует возможность дополнения ваших операторов switch и / или if/else таблицей вызовов. Вам может понадобиться несколько maps для обработки различных типов interface или даже объявление собственного functional interfaces для обработки дополнительных аргументов. Вы даже можете сделать его более динамичным, добавив reflection для приведения функций во время runtime.

...