Argparse4j

argparse4j 是 Python argparse 命令行解析器的 Java 语言移植版。这个要比spring AspectJ 更简单,更方便实现。

<dependency>
  <groupId>net.sourceforge.argparse4j</groupId>
  <artifactId>argparse4j</artifactId>
  <version>0.3.0</version>
</dependency>

 1 package Argparse4j;
 2
 3 import net.sourceforge.argparse4j.ArgumentParsers;
 4 import net.sourceforge.argparse4j.impl.Arguments;
 5 import net.sourceforge.argparse4j.inf.ArgumentParser;
 6 import net.sourceforge.argparse4j.inf.ArgumentParserException;
 7 import net.sourceforge.argparse4j.inf.Namespace;
 8
 9 import java.util.Collection;
10 import java.util.Collections;
11 import java.util.List;
12
13
14 /**
15  * Hello world!
16  *
17  */
18 public class App
19 {
20     private static interface Accumulate {
21         int accumulate(Collection<Integer> ints);
22     }
23
24     private static class Sum implements Accumulate {
25         @Override
26         public int accumulate(Collection<Integer> ints) {
27             int sum = 0;
28             for (Integer i : ints) {
29                 sum += i;
30             }
31             return sum;
32         }
33
34         @Override
35         public String toString() {
36             return getClass().getSimpleName();
37         }
38     }
39
40     private static class Max implements Accumulate {
41         @Override
42         public int accumulate(Collection<Integer> ints) {
43             return Collections.max(ints);
44         }
45
46         @Override
47         public String toString() {
48             return getClass().getSimpleName();
49         }
50     }
51
52     public static void main(String[] args) {
53         ArgumentParser parser = ArgumentParsers.newArgumentParser("app")
54                 .description("Process some integers.");
55         parser.addArgument("integers")
56                 .metavar("N")
57                 .type(Integer.class)
58                 .nargs("+")
59                 .help("an integer for the accumulator");
60         parser.addArgument("--sum")
61                 .dest("accumulate")
62                 .action(Arguments.storeConst())
63                 .setConst(new Sum())
64                 .setDefault(new Max())
65                 .help("sum the integers (default: find the max)");
66         try {
67             Namespace res = parser.parseArgs(args);
68
69             System.out.println(res);
70             System.out.print("----");
71             System.out.println(((Accumulate) res.get("accumulate"))
72                     .accumulate((List<Integer>) res.get("integers")));
73             System.out.println(res.get("accumulate"));
74             System.out.println(res.get("integers"));
75         } catch (ArgumentParserException e) {
76             parser.handleError(e);
77         }
78     }
79
80 }

java -jar  com.Argparse4j-1.0-SNAPSHOT.jar 1 X 4 --sum

Namespace(integers=[1, 2, 4], accumulate=Sum)
----7
Sum
[1, 2, 4]

java -jar  com.Argparse4j-1.0-SNAPSHOT.jar 1 3 4

Namespace(integers=[1, 3, 4], accumulate=Max)
----4
Max
[1, 3, 4]

时间: 2024-10-12 04:53:33

Argparse4j的相关文章

An annotation based command line parser

JCommander star1000+ This is an annotation based parameter parsing framework for Java 8. The full doc is available at http://jcommander.org. Java port of Python's famous argparse command-line argument parser. https://argparse4j.github.io/ Argparse4j