2010-11-08 33 views
19

我想從另一個方法調用類的主要方法,像從命令行運行類一樣傳遞參數。有沒有辦法做到這一點?是否有可能調用其他方法傳遞args []的main方法?

+4

當你嘗試時發生了什麼? – EJP 2010-11-08 09:25:18

+0

@EJP - 不能同意你的看法。這個問題可能已經微不足道了(可能比發佈問題更快)。 – 2010-11-08 13:50:26

+0

比發佈這個問題快得多,並且大小順序比等待答案更快......這可能永遠不會到達。 – EJP 2010-11-09 09:23:43

回答

0

你可以重新命名你的main並創建一個新的,使其成爲「新」主。至少這是我一般做時,單元測試

+3

單元測試不應該要求你改變你的方法,這是一個非常糟糕的做事方式 – 2010-11-08 09:13:53

+1

我沒有說清楚,但我幾乎從來沒有一個主要的東西解析參數並將它們傳遞給別的東西,因爲笨重的主力只是一個壞主意。此外,更改測試代碼並不是一個好主意,但是您應該首先編寫可測試的代碼 – juhanic 2010-11-09 06:54:55

12

是的,主要方法可以被稱爲像任何其他方法,所以如果你有一個main方法的類測試,您可以從任何其他類一樣調用它:

Test.main(new String[] { "a", "b" }); 

這樣你就可以傳遞「a」和「b」作爲參數。

+0

謝謝,它正在工作 – abcdefg 2010-11-08 09:17:19

5

你有沒有嘗試過這樣的:

// In your method 
String[] yourArgs = new String[] {"foo", "baz", "bar"}; 
YourClassWithMain.main(yourArgs); 

但我認爲這不是一個好主意,在main()方法應該只包含其調用構造一些非常基本的代碼。你不應該直接調用它,而是創建另一個類的新實例,它將完成所有需要的初始化。

21

可以調用main方法,你會調用任何其它(靜態)方法:

MyClass.main(new String[] {"arg1", "arg2", "arg3"}); 

例子:

class MyClass { 
    public static void test() { 
     MyClass.main(new String[] {"arg1", "arg2", "arg3"}); 
    } 

    public static void main(String args[]) { 
     for (String s : args) 
      System.out.println(s); 
    } 
} 
3

答案是肯定的,

由於mainstatic方法和是公衆方法,你可以做到這一點(和它編譯我的情況):

/** 
* @author The Elite Gentleman 
* 
*/ 
public class Test { 

    /** 
    * 
    */ 
    public Test() { 
     super(); 
     // TODO Auto-generated constructor stub 
     Test.main(new String[] {"main"}); //Yes, it works and compiles.... 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     System.out.println("Hello"); 

    } 
} 
2

當然,你可以撥打main - 方法,就像這樣一個普通的(靜態)方法:

TheClass.main(new String[] { "lorem", "ipsum" }); 

作爲一個側面說明,你可以聲明的主要方法是這樣的:

public static void main(String... args) { ... } 

,並調用它像

TheClass.main("lorem", "ipsum"); 

生成的字節碼是相同的(可變長度被編譯爲數組),所以它在所有方面都是向後兼容的(除非它不能在非可讀的java編譯器上編譯)。

相關問題