2013-08-01 117 views
0

當調用存在於另一個類的「主」,這是很容易,只是說:何時調用main而不是調用main?

otherClass.main(stringArgs); 

什麼是落後首先使用反射來獲取類,然後調用方法,而不是調用它的原因以靜態的方式?

回答

4

原因可能是,如果使用反射,則不需要對調用main方法的類有編譯時間依賴性。您可以動態加載的類,使用Class.forName(...),然後使用反射來找到main方法並調用它。

String name = "com.mycompany.MyMainClass"; 

// Load the class dynamically 
Class<?> mainClass = Class.forName(name); 

// Find the 'main' method that takes a string array 
Method mainMethod = mainClass.getMethod("main", new Class<?>[] { String[].class }); 

// Invoke the method; first arg is null, because the method is static 
mainMethod.invoke(null, new String[] { "one", "two" }); 
+0

另一個非常好的一點。 –

1

我不知道爲什麼你曾經這樣做。我從來不需要以這種方式調用另一個主要方法,除非我正在做一些事情或做實驗。

但通常使用反射來調用一個方法,而不是直接調用它的時候,你不知道有足夠的瞭解你調用類,或當你在搜索和調用標有註釋的方法。

這就是反射是爲那些。

1

有很多理由使用反射。但是如果你有一個類的實例(或者如果我們正在談論一個靜態方法時有一個類的名字)並且知道你想調用的方法的名字(在編譯期間),你不應該使用反射。

給你一個例子,使用反射的一個原因是,如果你出於某種原因擁有一個String包含一個方法名稱(假設你從用戶那裏獲得這個名稱)並且想要調用這個特定類的方法。你顯然不能只說otherClass.methodName,因爲methodName將根據用戶輸入的內容而有所不同。

1

在大多數情況下,根本不需要調用main,而是在構建時不知道類的情況下,甚至可能不在調用的代碼庫內部。這可能是您經常目睹main反射電話的原因。

事實上,呼籲main靜態讓人頗爲毫無意義。

相關問題