Picocli: укажите значение по умолчанию для параметра с типом карты - PullRequest
1 голос
/ 25 октября 2019

У меня есть такая опция

    @CommandLine.Option(names = "-D", description = "Define a symbol.")
    /* A list of defines provided by the user. */
    Map<String, String> defines = new LinkedHashMap<String, String>();

Это работает, когда я делаю следующее:

-Dkey=value

однако, когда я делаю это

-Dkey

это не работает. Есть ли способ добавить значение по умолчанию для ключей, с которыми не связано значение?

1 Ответ

1 голос
/ 26 октября 2019

Это можно сделать с помощью пользовательского параметра Cononsumer . Например:

/* A list of defines provided by the user. */
@Option(names = "-D", parameterConsumer = MyMapParameterConsumer.class,
  description = "Define a symbol.")
Map<String, String> defines = new LinkedHashMap<String, String>();

... где MyMapParameterConsumer может выглядеть примерно так:


class MyMapParameterConsumer implements IParameterConsumer {
    @Override
    public void consumeParameters(
            Stack<String> args, 
            ArgSpec argSpec, 
            CommandSpec commandSpec) {

        if (args.isEmpty()) {
            throw new ParameterException(commandSpec.commandLine(), 
                    "Missing required parameter");
        }
        String parameter = args.pop();
        String[] keyValue = parameter.split("=", 1);
        String key = keyValue[0];
        String value = keyValue.length > 1 
                ? keyValue[1]
                : "MY_DEFAULT";
        Map<String, String> map = argSpec.getValue();
        map.put(key, value);
    }
}
...