[英]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.