java - Apache Commons CLI-विकल्प प्रकार और डिफ़ॉल्ट मान




apache-commons apache-commons-cli (3)

OptionBuilder 1.3 और 1.4 संस्करण में पदावनत है और Option.Builder के प्रकार सेट करने के लिए एक सीधा कार्य नहीं लगता है। Option वर्ग के लिए एक फ़ंक्शन है जिसे setType कहा जाता है। आप CommandLine.getParsedOptionValue फ़ंक्शन के साथ एक परिवर्तित मान प्राप्त कर सकते हैं। निश्चित नहीं है कि यह बिल्डर का हिस्सा क्यों नहीं है। अब इसे कुछ कोड की आवश्यकता है:

    options = new Options();

    Option minOpt = Option.builder("min").hasArg().build();
    minOpt.setType(Number.class);
    options.addOption(minOpt);

और इसे पढ़ना:

    String testInput = "-min 14";
    String[] splitInput = testInput.split("\\s+");

    CommandLine cmd =  CLparser.parse(options, splitInput);
    System.out.println(cmd.getParsedOptionValue("min")); 

जो टाइप Long का वैरिएबल देगा

मैं एक CLI विकल्प कैसे दे सकता हूं - जैसे कि int या Integer ? (बाद में, मैं एकल फ़ंक्शन कॉल के साथ पार्स किया गया मान कैसे प्राप्त कर सकता हूं?)

मैं एक सीएलआई विकल्प को एक डिफ़ॉल्ट मूल्य कैसे दे सकता हूं? ऐसे कि CommandLine.getOptionValue() या फ़ंक्शन कॉल ऊपर उल्लिखित है, जब तक कि कोई भी कमांड लाइन पर निर्दिष्ट न हो?


मुझे नहीं पता कि काम नहीं कर रहा है या अगर हाल ही में जोड़ा गया है, लेकिन getOptionValue() में एक अतिभारित संस्करण है जो डिफ़ॉल्ट (स्ट्रिंग) मान स्वीकार करता है


संपादित करें: डिफ़ॉल्ट मान अब समर्थित हैं। नीचे देखें उत्तर https://.com/a/14309108/1082541

जैसा कि ब्रेंट वर्डेन ने पहले ही उल्लेख किया है, डिफ़ॉल्ट मान समर्थित नहीं हैं।

मैं Option.setType का उपयोग करने के साथ भी समस्याएँ थी। जब हमेशा Integer.class साथ एक विकल्प पर getParsedOptionValue कॉल getParsedOptionValue पर मुझे एक शून्य सूचक अपवाद मिला। क्योंकि प्रलेखन वास्तव में सहायक नहीं था, मैंने स्रोत कोड में देखा।

TypeHandler क्लास और PatternOptionBuilder क्लास को देखते हुए आप देख सकते हैं कि Number.class का इस्तेमाल int या Integer लिए किया जाना चाहिए।

और यहाँ एक सरल उदाहरण है:

CommandLineParser cmdLineParser = new PosixParser();

Options options = new Options();
options.addOption(OptionBuilder.withLongOpt("integer-option")
                      .withDescription("description")
                      .withType(Number.class)
                      .hasArg()
                      .withArgName("argname")
                      .create());

try {
    CommandLine cmdLine = cmdLineParser.parse(options, args);

    int value = 0; // initialize to some meaningful default value
    if (cmdLine.hasOption("integer-option")) {
        value = ((Number)cmdLine.getParsedOptionValue("integer-option")).intValue();
    }

    System.out.println(value);
} catch (ParseException e) {
    e.printStackTrace();
}

ध्यान रखें कि यदि संख्या प्रदान की गई है जो एक int में फिट नहीं होती है तो value अतिप्रवाह हो सकता है





apache-commons-cli