2016-12-03 75 views
-2

在Java中,使用反射,當你使用下面的代碼可以訪問的方法的每個參數的名稱:爲什麼與Methods不同,構造函數不保留它們在Java中的參數名稱?

Parameter[] parameters = method.getParameters(); 
String parameterName = parameter[<index of desired parameter>].getName(); 

但是,這樣做是不可能使用構造函數的標準反射API。爲什麼這樣?

+1

你爲什麼認爲這是不可能的? 'getParameters'來自'Method'和'Constructor'共享的父類。 –

回答

0

但是,對構造函數使用標準反射API是不可能的。

我不認爲這是正確的。如果將應用於ConstructorMethod,則的工作方式應該是相同的。 javadoc說。

您可能會看到您看到的參數名稱與源代碼不對應的情況。該javadoc說,這是可能太:

「的基礎可執行的參數不一定有唯一的名稱,或在Java編程語言(JLS 3.8)合法的標識符名稱。」

這可能是由於你正試圖反思的類被編譯的方式。如果您可以使用完整的調試信息(請參閱javac -g標誌)從源代碼重新編譯它們,則名稱應該在那裏。

+0

你能指點我正確的功能嗎?因爲我在https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Constructor.html找不到任何這樣的功能。 編輯:nevermind,我剛剛發現getParameters();是從Executable類繼承而來的。謝謝! – Sam445

相關問題