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

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

 import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.impl.Arguments;
import net.sourceforge.argparse4j.inf.ArgumentParser;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace; import java.util.Collection;
import java.util.Collections;
import java.util.List; /**
* Hello world!
*
*/
public class App
{
private static interface Accumulate {
int accumulate(Collection<Integer> ints);
} private static class Sum implements Accumulate {
@Override
public int accumulate(Collection<Integer> ints) {
int sum = 0;
for (Integer i : ints) {
sum += i;
}
return sum;
} @Override
public String toString() {
return getClass().getSimpleName();
}
} private static class Max implements Accumulate {
@Override
public int accumulate(Collection<Integer> ints) {
return Collections.max(ints);
} @Override
public String toString() {
return getClass().getSimpleName();
}
} public static void main(String[] args) {
ArgumentParser parser = ArgumentParsers.newArgumentParser("app")
.description("Process some integers.");
parser.addArgument("integers")
.metavar("N")
.type(Integer.class)
.nargs("+")
.help("an integer for the accumulator");
parser.addArgument("--sum")
.dest("accumulate")
.action(Arguments.storeConst())
.setConst(new Sum())
.setDefault(new Max())
.help("sum the integers (default: find the max)");
try {
Namespace res = parser.parseArgs(args); System.out.println(res);
System.out.print("----");
System.out.println(((Accumulate) res.get("accumulate"))
.accumulate((List<Integer>) res.get("integers")));
System.out.println(res.get("accumulate"));
System.out.println(res.get("integers"));
} catch (ArgumentParserException e) {
parser.handleError(e);
}
} }

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]

Argparse4j的更多相关文章

  1. An annotation based command line parser

    Java命令行选项解析之Commons-CLI & Args4J & JCommander http://rensanning.iteye.com/blog/2161201 JComm ...

  2. 最新Java技术

    最近在网上查资料碰到好多没接触过的技术,先汇总在这里备用,以后慢慢吸收 1. JNA JNI的替代品,调用方式比JNI更直接,不再需要JNI那层中间接口,几乎达到Java直接调用动态库 2. Smal ...

随机推荐

  1. crontab表达式执行时间计算,crontab在线测试

    熟悉Unix和Linux的朋友都知道Crontab表达式,通过crontab指令可以周期性调用或执行某个程序.   但是大家写完crontab表达式后,心里总是担心表达式写的不对,可以又没法去验证.比 ...

  2. OOP中this指向详解

    谁调用了函数,this就指向谁 >>> this指向的永远只可能是对象!!! >>> this指向谁,永远不取决于this写在哪,而是取决于函数在哪调用!!! &g ...

  3. #417 Div2 B

    #417 Div2 B 题意 给定一个01矩阵表示一幢楼,左右两侧是楼梯,中间是房间,1代表那个房间开灯,0代表关灯,现在某人从1层左端楼梯开始关掉所有灯,当移动某一层时,必须关掉当前层所有灯才能移动 ...

  4. Selenium基础知识

    本人博客文章网址:https://www.peretang.com/basic-knowledge-of-selenium/ 什么是Selenium Selenium是一个自动化测试工具 是一组不同的 ...

  5. 使用React改版网站后的一些感想

    文章转载:http://www.jianshu.com/p/8f74cfb146f7 网站是毕业设计的作品,开发这个网站的目的主要用于记录一些笔记,以及聚合一些资讯信息,也算自己在网络世界中的一块静地 ...

  6. Vivado2015.4使用教程(一个完成工程的建立)

    双击桌面的vivado图标,(可能有点慢) 弹出主菜单界面,点击create new project 这是介绍界面,next~ 添加好工程名,和工程位置,next~ 选择rtl Project,nex ...

  7. 使用类似于中介者模式实现不同VC之间的跳转

    在2013年的时候,我们就已经实现了类似于http地址进行页面跳转, 那个时候,主要是用继承ViewController和给 UIViewController和UINavigationControll ...

  8. Java线程间通信之wait/notify

    Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式.我们来看下相关定义: w ...

  9. EJB系列 - 会话Bean基础知识

    本人博客文章网址:https://www.peretang.com/basic-knowledge-of-session-bean/ 什么是会话 有限的时间周期内,客户端和服务器之间的连接 为什么使用 ...

  10. Visual Studio 2017 for Mac 体验之Android.Form

    微软官方说明: Visual Studio 2017 for Mac Last Update: 2017/6/16 我们非常荣幸地宣布 Visual Studio 2017 for Mac 现已推出. ...