#java #command-line-arguments #decoupling
#java #аргументы командной строки #развязка
Вопрос:
При анализе параметров с помощью библиотеки JOpt Simple единственный известный мне способ доступа к их соответствующим типам — это сохранить экземпляры OptionSpec где-нибудь и получить к ним доступ позже. Например:
OptionParser parser = new OptionParser();
ArgumentAcceptingOptionSpec<Path> pathOption = parser
.acceptsAll(Arrays.asList("p", "path"),
"Read message from a file")
.withRequiredArg()
.withValuesConvertedBy(new PathConverter());
/* We will use this one latter */
OptionSpec<Path> pathOptionSpec = pathOption;
OptionSet parsedOptions = parser.parse("-path", "./foo/bar");
/*
See? Unless I missed something, you need the pathOptionSpec object
(which is of type OptionSpec<Path>) to retrieve the "path"'s option type.
If I used .valueOf("path"), it would return
an OptionSet<?> and I would have to typecast it!
*/
assertThat(
parsedOptions.valueOf(pathOptionSpec),
instanceOf(OptionSpec<Path>.class));
Теперь, что я сделал, это сохранил OptionParser, OptionSet и все OptionSpec как статические члены основного класса и получил доступ к этим параметрам из любого места в программе (теперь вы можете визжать и поднимать свои вилы).
- Есть ли простой способ управлять проанализированными аргументами CLI безопасным для типов способом?