Понимание того, как работает Spring ShellJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Понимание того, как работает Spring Shell

Сообщение Anonymous »

Я использую Spring-Shell 3.3.3 при загрузке Spring и имею следующий код:

Код: Выделить всё

@Command
public class ExperimentCommand {

@Command(command = "experiment", description = "Loads a bunch of files from a folder")
@SuppressWarnings("java:S107")
public String experiment(
@Option(longNames = "path", description = "Path of the directory with the files to be processed", required = true, arity = OptionArity.EXACTLY_ONE) String path,
@Option(longNames = "async", description = "Use async requests on HTTP level", arity = OptionArity.ZERO, defaultValue = "false") boolean async) {
return """
path %s
async %s"""
.formatted(path, async);
}
}
Я не совсем понимаю, когда параметру нужно давать имя, а когда нет. У меня есть следующие примеры:
именованный аргумент

Код: Выделить всё

java .. experiment --path ABC
< path ABC
< async false
это работает так, как ожидалось
безымянный аргумент

Код: Выделить всё

java .. experiment ABC
< path ABC
< async false
Это тоже работает, но мне интересно, как Spring-Shell считает, что безымянный аргумент — это именно путь (особенно, если имеется несколько поддерживаемых аргументов)
безымянный аргумент с дополнительной логической опцией

Код: Выделить всё

java .. experiment --async ABC
< Too many arguments for option 'async', requires at most '0'
< Illegal option value 'ABC', reason 'Failed to convert from type [java.lang.String] to type [boolean] for value [ABC]'
< Missing mandatory option '--path', Path of the directory with the files to be processed
Поскольку --async имеет arity=OptionArity.ZERO, почему следующий аргумент интерпретируется как логическое значение?
именованный аргумент с дополнительной логической опцией
следовательно, здесь я ожидаю ошибку «невозможно преобразовать --path в логическое значение», но этот работает. Почему?:

Код: Выделить всё

java .. experiment --async --path ABC
< path ABC
< async true
С точки зрения опции --async это то же самое, что и предыдущий вызов. Почему это работает и никаких дополнительных логических значений не ожидается, но пример 3 не удался?

Подробнее здесь: https://stackoverflow.com/questions/791 ... hell-works
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»