Учитывая команду - используйте регулярное выражение для вызова методов в Java/ Groovy

Для входной командной строки я хочу использовать регулярное выражение для сопоставления и выполнения соответствующего метода.

Например, 1. Пользователь вводит "телефон 323244332"

Затем я хочу вызвать метод, который возьмет номер телефона в качестве аргумента и сохранит его в БД

Точно так же будет около 100 команд и соответствующий метод для вызова.

Как мы можем реализовать то же самое в Java или Groovy? Я могу перенести решение на другой язык по мере необходимости. Существуют ли известные шаблоны проектирования или решения для того же?

Спасибо!!!

3 ответа

Решение

На самом базовом уровне вы можете сделать это в Groovy:

def phone( String number ) {
    println "phone called with $number"
}

String userCommand = 'phone 323244332'

userCommand.split().with {
   "${head()}"( *tail() )
}

Но если у вас есть несколько команд или команд на запрос пользователя И ваши команды будут в стиле, разбираемом с помощью groovy (то есть: параметры, разделенные запятыми), тогда вы можете подумать о написании groovy dsl... Однако я подозреваю, что вы ' Я собираюсь бороться с полной на DSL, как я думаю, цифры могут быть 00441784984456, который без двойных кавычек будет интерпретирован как недопустимое восьмеричное число (и поэтому потерпит неудачу)

Я не думаю, что вам нужно регулярное выражение. Вы можете просто разделить пробел, а затем использовать отражение, чтобы найти соответствующий метод в классе (например, phone(String num)) и выполнить это.

например, в псевдокоде:

String[] args = input.split(" ");
Method[] allMethods = declaringClass.getDeclaredMethods();
for (Method m : allMethods) {
    if (m.getName().equals(args[0])) {
       // call it here...
       m.invoke(....);
    }
}

Обратите внимание, что это зависит от платформы, поэтому вышеописанное будет работать на JVM, но для (скажем) Perl потребуется другой подход.

Вы можете создавать статические методы с допустимыми аргументами, а затем автоматически статически импортировать методы на отличном уровне

Другие вопросы по тегам