如果java程序将从shell调用,那么哪种方式传递参数更好?

如果java程序将从shell调用,那么哪种方式传递参数更好?,java,Java,我有一个java程序,它有很长的参数列表: public class MyTool { public static void main(String[] args) { String aaa = args[0]; String bbb = args[1]; String ccc = args[2]; String ddd = args[3]; String eee = args[4]; Str

我有一个java程序,它有很长的参数列表:

public class MyTool {
    public static void main(String[] args) {
        String aaa = args[0];
        String bbb = args[1];
        String ccc = args[2];
        String ddd = args[3];
        String eee = args[4];
        String fff = args[5];
        String ggg = args[6];
    }
}
当我的同事使用它时,他抱怨参数列表太长,他必须这样传递参数:

java MyTool someArg someArg someArg someArg someArg someArg someArg
他在没有反复检查源代码的情况下对每个参数的含义感到困惑

他建议我使用
-Daaa=bbb
样式来传递参数,这意味着我的代码应该是:

public class MyTool {
    public static void main(String[] args) {
        String aaa = System.getProperty("aaa");
        String bbb = System.getProperty("bbb");
        String ccc = System.getProperty("ccc");
        String ddd = System.getProperty("ddd");
        String eee = System.getProperty("eee");
        String fff = System.getProperty("fff");
        String ggg = System.getProperty("ggg");
    }
}
因此,他可以将其作为:

java -Daaa=someArg -Dbbb=someArg -Dccc=someArg \
     -Dddd=someArg -Deee=someArg -Dfff=someArg -Dggg=someArg \
     MyTool
对他来说,在不检查源代码的情况下了解每个参数的含义要好得多


我不知道哪种方法更好,什么时候我应该使用一种方法来对抗另一种方法?

老实说,你应该坚持将参数定期传递给main方法。根据我的经验,当您无法通过main方法访问参数或在多个程序中需要参数时,最好使用
-D*参数*
样式


编辑:还有一个事实,您现在正在为特定于单个项目的某个对象设置全局属性。

老实说,您应该坚持将参数定期传递给main方法。根据我的经验,当您无法通过main方法访问参数或在多个程序中需要参数时,最好使用
-D*参数*
样式


编辑:还有一个事实,您现在正在为特定于单个项目的内容设置一个全局属性。

使用他的方式,他必须输入更多内容,但他也更清楚自己在做什么。你的方式更快,但有点神秘。因此,这是一个设计选择,每个人都会提出不同的建议


我的品味是用你原来的方式去做——然而;我总是添加一个'--help'调用参数,它将打印可用的参数,这样他就不必检查源代码(用户永远不需要这样做),事情就不那么神秘了。

用他的方式,他必须输入更多,但他也更清楚自己在做什么。你的方式更快,但有点神秘。因此,这是一个设计选择,每个人都会提出不同的建议


我的品味是用你原来的方式去做——然而;我总是添加一个'--help'调用参数,它将打印可用的参数,这样他就不必检查源代码(用户永远不需要这样做),事情就不那么神秘了。

一个或两个位置参数是可以的,但如果你有一堆选项,你真的应该给它们一个名称(意思)并使用如下命令行选项库:

你喜欢这样的东西吗

java MyTool -xyz -a someArg --aaa=someArg --bbb=someArg --ccc=someArg

一个或两个位置参数是可以的,但如果您有一组选项,您真的应该给它们一个名称(意思)并使用如下命令行选项库:

你喜欢这样的东西吗

java MyTool -xyz -a someArg --aaa=someArg --bbb=someArg --ccc=someArg

这只会使他必须键入的金额更长….?这只会使他必须键入的金额更长….?…如果你不喜欢GNU getopt…如果你不喜欢GNU getopt