Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 命令行参数的正确设计?_Java_Command Line_Command Line Arguments - Fatal编程技术网

Java 命令行参数的正确设计?

Java 命令行参数的正确设计?,java,command-line,command-line-arguments,Java,Command Line,Command Line Arguments,我有一个Java类API,如下所示: boolean categoryAdd( String name, String description, String user ); 我需要为它创建一个等效的命令行 命令行参数是什么样子的 像这样 -categoryadd name description user 还是像这样 -categoryadd -categoryname name -categorydescription description -categoryuser user -c

我有一个Java类API,如下所示:

boolean categoryAdd( String name, String description, String user );
我需要为它创建一个等效的命令行

命令行参数是什么样子的

像这样

-categoryadd name description user
还是像这样

-categoryadd -categoryname name -categorydescription description -categoryuser user
-categoryadd -categoryname=name -categorydescription=description -categoryuser=user
还是像这样

-categoryadd -categoryname name -categorydescription description -categoryuser user
-categoryadd -categoryname=name -categorydescription=description -categoryuser=user

还是别的什么

在java命令行字符串中,由空格分隔,因此当您从CLI调用方法时,如:

java MyClass类别添加名称描述用户

,在主类中,您将收到带有4个值的参数:

分类 名称 描述 使用者 通过这种方式,操作validate参数将很容易,因为您不需要执行额外的操作来提取传递的变量

从另一方面来说,在没有额外信息的情况下,从用户的角度来看,传递什么样的参数以及以什么顺序传递是相当混乱的。 在第二和第三个命题中,您需要帮助用户确定他通过了哪些参数。我更喜欢带等号的第三个命题,因为它很容易解析: 您将收到如下参数:

-分类 -categoryname=名称 -categorydescription=说明 -categoryuser=用户 现在您可以先延迟,然后用string.split=way解析键值。
您的第二个选项也可以完成,但我认为它更棘手。

常见用法规定,单字符短选项的形式为-v,多字符长选项的形式为-verbose作为示例

认真考虑使用CLI解析库,它将为您和更多地处理这一切。


我的偏好是,它功能齐全、稳定且非常有用。较新的库使用@Annotation和其他东西,但这为我做到了。

使用像Thanke这样的框架。这不是关于框架,而是关于如何设计命令。是的,但是框架为您解决了这个问题。它支持不同类型的选项POSIX、GNU Long选项等。有一个问题:这段代码已经传输给我了,我不能更改太多。我无法切换到新的CL框架。然而,我想,至少,以一种适当的方式设计我的命令。我从来都不喜欢这样的回答:让这个为你做吧,因为这真的意味着,不要费心学习,其他人已经做了。我同意第一个解决方案。谢谢