Java 命令行参数的正确设计?
我有一个Java类API,如下所示: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
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框架。然而,我想,至少,以一种适当的方式设计我的命令。我从来都不喜欢这样的回答:让这个为你做吧,因为这真的意味着,不要费心学习,其他人已经做了。我同意第一个解决方案。谢谢