簡體   English   中英

如果將從外殼程序調用Java程序,哪種方法傳遞參數更好?

[英]If a java program will be called from shell, which way is better to pass the arguments?

我有一個參數列表很長的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*argument*時,最好使用-D*argument*樣式。

編輯:同樣,您現在正在為單個項目的特定屬性設置全局屬性。

一個或兩個位置參數是可以的,但是如果您有很多選項,則應該給它們一個名稱(含義),並使用這樣的命令行選項庫: http : //www.gnu.org/software/gnuprologjava/ api / gnu / getopt / Getopt.html

你忍受這樣的事情

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

用他的方式,他將不得不輸入更多,但他也將更好地了解自己在做什么。 您的方法更快,但有點神秘。 因此,這是一種設計選擇,每個人在這里都會提出不同的建議。

我的口味會按照您的原始方式來做-但是; 我總是會添加一個'--help'調用參數,該參數將打印可用的參數,因此他不必檢查源代碼(用戶永遠不需要這樣做),並且事情變得更加隱秘。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM