2016-11-16 1 views
0

두 가지 방법에 대해 약간 의문이 생깁니다. 이 경우 내가 getOptionValue(optionName)을 사용하면 내가 명령 줄에 입력 한 인수를받을 수 있나요하지만 optionName.getValue()Commons CLI getValue() 및 getOptionValue()

getValue를 사용할 때 내가 널 수()

지정된이 옵션의 값을 돌려줍니다 no 값입니다. 어떤 경우

getOptionValue (문자열)

이 옵션으로, 첫 번째 인수를 검색합니다.

당신이 getOptionValue(String)을 볼 수 있듯이

명시 적으로 다른로만 값을 말한다 인수를 말합니다하지만 그들은 모두 자신의 방법 이름에 "값"을 가지고있다. setValue(String) 메쏘드 같은 것이 없기 때문에 나는 단지 인자와 똑같다고 생각했습니다.

public static void main(final String[] args) { 
    CommandLine cmd = null; 
    Option program = Option.builder("p") 
      .hasArg() 
      .required(true) 
      .longOpt("program") 
      .build(); 

    Options options = new Options(); 
    options.addOption(program); 

    CommandLineParser parser = new DefaultParser(); 
    try { 
     cmd = parser.parse(options, args); 
    } 
    catch(ParseException exp) { 
     System.err.println("Parsing failed. Reason: " + exp.getMessage()); 
    } 

    String[] list; 
    list = cmd.getArgs(); 

    int argsN = program.getArgs(); 
    String optionValue = cmd.getOptionValue("p"); 
    String value = program.getValue(); 

    System.out.println(argsN); 
    System.out.println(optionValue); 
    System.out.println(value); 

} 

출력은 다음과 같습니다

1

[인수]

답변

0

하지만 현재에 목적 것으로 보인다 이유는 확실하지 않다. 라인에서 방법 handleOption()의 클래스 DefaultParser에서 601 코드가 수행합니다 특히 당신이 전달하는 옵션과 내부 옵션 객체 사이의 관계를 인하

option = (Option) option.clone(); 

, 코드가 객체를 변경하지 않습니다 보인다 그것을 어떤 식 으로든 주어졌습니다.

따라서 값을 검색하는 유일한 방법은 CommandLine 클래스를 사용하는 것입니다.