Когда команд становится больше, длинная цепочка if/else быстро начинает мешать. Вместо этого можно хранить обработчики в Map.
Опишем интерфейс команды:
@FunctionalInterface
interface Command {
void run(String[] args);
}
Создадим registry:
Map<String, Command> commands = new HashMap<>();
Добавим пару команд:
commands.put("hello", args ->
System.out.println("Hello, " + args[0]));
commands.put("sum", args ->
System.out.println(Integer.parseInt(args[0])
+ Integer.parseInt(args[1])));Теперь входную строку можно разделить:
String input = "sum 10 25";
String[] parts = input.split(" ");
Первый элемент — имя команды:
String name = parts[0];
String[] args = Arrays.copyOfRange(parts, 1, parts.length);
Достаём обработчик:
Command command = commands.get(name);
И запускаем, если команда существует:
if (command != null) {
command.run(args);
} else {
System.out.println("Unknown command");
}Ожидаемый вывод для
sum 10 25:35
Такой подход удобно расширять, новая команда добавляется одной строкой в registry, без переписывания большого switch.
👉 Java Ready | #практика