В моем варианте нет необходимости дополнительно упрощать ваши инструкции switch, так как они читаемы и делают разные вещи. Кроме того, для упрощения вам нужно будет добавить дополнительный слой абстракции, который здесь (на самом деле) невозможен.
Единственное, что вы могли бы здесь абстрагироваться, это параметр var
. Хотя я бы не рекомендовал его, возможно, вы можете попробовать что-то вроде этого:
private Consumer<Integer> createConsumer(Runnable... actions) {
return i -> {
if (actions.length < i)
throw new IllegalArgumentException();
actions[i].run();
};
}
Вы можете создать пользователя, который принимает суровое количество Runnable
объектов
var consumer = createConsumer(
() -> System.out.println("First"),
() -> System.out.println("Second"),
() -> System.out.println("Third"));
и выполните его, как
consumer.accept(0);
Если вам также понадобится инструкция по умолчанию Consumer<Integer> createConsumer(Runnable... actions, Runnable defaultOption)
, она может оказаться излишней.
Однако это будет только некоторый функциональный стиль оператора switch
, который может сделать вещи еще более сложными, когда параметр не начинается с 0, но какой-то другой номер (вам нужно вычесть до 0), или если вы переключаете блок, есть «пробелы» «числа (0, 1, 3, ...).