Обработка параметров командной строки безопасным для типов способом после синтаксического анализа с помощью JOpts

#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 безопасным для типов способом?