Учитывая команду - используйте регулярное выражение для вызова методов в 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 потребуется другой подход.
Вы можете создавать статические методы с допустимыми аргументами, а затем автоматически статически импортировать методы на отличном уровне